@c4dt/nativescript-websockets
由 c4dt 编写 | v1.5.5
适用于 Android 和 iOS 的 WebSocket NativeScript 模块
npm i --save @c4dt/nativescript-websockets

npm npm npm

NativeScript WebSockets

这是一个适用于 iOS 和 Android 的跨平台 WebSocket 库。

许可证

我的代码(c)2015-2019,Master Technology。我的所有代码都按照 MIT 许可证授权。Android 库也是 MIT 许可,iOS 库使用 Apache 2.0 许可;您可以阅读“LICENSE”文件查看它们。

我还做合同工作;如果您想为 NativeScript(或任何其他软件项目)构建模块,请随时联系我 [email protected]

如果您想使用专业和支持插件,请查看全新 https://proplugins.org

安装

首先运行 tns --version

v1.4 或更高版本

在您的项目根目录中运行 tns plugin add nativescript-websockets

限制

  • 两个平台上的协议发送支持都未完全实现。不要依赖它;它只部分工作。

Angular

请注意并不要忘记使用 NgZone.run() -- 如果在某些情况下您没有使用它;当您获取数据更新时,您的 UI 可能不会更新。这不是该库的限制;这只是 Angular 的变更检测系统的工作方式。

用法

您可以使用两种可能的接口:模拟基于浏览器的 WebSocket 的简单 WebSocket 接口以及您有更多控制的更高级 WebSocket 接口。

基于浏览器的接口

require('nativescript-websockets');

var mySocket = new WebSocket("ws://echo.websocket.org", [ /* "protocol","another protocol" */]);
mySocket.addEventListener('open', function (evt) { console.log("We are Open"); evt.target.send("Hello"); });
mySocket.addEventListener('message', function(evt) { console.log("We got a message: ", evt.data); evt.target.close(); });
mySocket.addEventListener('close', function(evt) { console.log("The Socket was Closed:", evt.code, evt.reason); });
mySocket.addEventListener('error', function(evt) { console.log("The socket had an error", evt.error); });

高级接口

var WS = require('nativescript-websockets');

var mySocket = new WS("ws://echo.websocket.org",{protocols: [/* 'chat', 'video' */], timeout: 6000, allowCellular: true, headers: { 'Authorization': 'Basic ...' }});
mySocket.on('open', function(socket) { console.log("Hey I'm open"); socket.send("Hello"); });
mySocket.on('message', function(socket, message) { console.log("Got a message", message); });
mySocket.on('close', function(socket, code, reason) { console.log("Socket was closed because: ", reason, " code: ", code); });
mySocket.on('error', function(socket, error) { console.log("Socket had an error", error);});

基于浏览器的 WebSocket

基于浏览器的 WebSocket 与您使用浏览器时几乎相同;当您创建它时会自动打开;所有四个事件都具有不同值的“事件”对象。您不允许重新打开已关闭的套接字,并且您无法控制任何其他附加功能。

创建和打开新的基于浏览器的 WebSocket

new WebSocket(url, [protocols]);

参数
  • URL - (String) - 要打开的 WebSocket URL
  • 协议 - 可选(String 数组)- 有效的协议列表。请参阅限制说明。

将事件附加到 WebSocket

****#### .attachEventListener(EventName, function)

.on(EventName, function)

参数
  • EventName - (String) 可以是 "open"、"close"、"message" 和 "error"
  • function - (Function) 当事件发生时将被调用的函数

高级 WebSocket

高级 WebSocket 允许您在设置和创建方面拥有更多控制;另外,如果它们已关闭,您可以在不重置事件的情况下重新打开它。

创建新的高级 WebSocket

var WS = require('nativescript-websockets'); var ws = new WS(url, options);

参数
  • URL - 打开 URL
  • 选项 ** 协议 - (字符串数组) - 有效的协议。(见限制说明) ** 超时 - 超时时间(在iOS上默认为60,000ms,在Android上默认为10,000ms,将此设置为0将禁用超时) ** allowCellular(仅iOS,默认为True) - 可以禁用WebSocket通过蜂窝网络传输 ** sslSocketFactory(仅Android,默认为null) - 您可以传递您想要使用的SSL套接字工厂。

将事件附加到 WebSocket

.attachEventListener(事件名称,函数,传递的this)

.on(事件名称,函数,传递的this)

参数
  • EventName - (String) 可以是 "open"、"close"、"message" 和 "error"
  • 函数 - (函数) 当事件发生时将被调用的函数
  • 传递的this - 函数期望的"this"对象

打开WebSocket

.open()

说明:在高级WebSocket中,您可以重新打开已关闭的WebSocket...

高级和浏览器WebSocket之间的常见函数

关闭已打开的Socket

.close(code, reason)

参数
  • code - 可选(数字) - 代码
  • reason - 可选(字符串) - 原因

发送文本或二进制消息

.send(message)

参数
  • message - 字符串或数组/ArrayBuffer - 要发送的文本字符串或二进制消息

检索当前状态

.readyState

  • 0 - 连接
  • 1 - 打开
  • 2 - 关闭中
  • 3 - 已关闭

您打开的URL

.url

返回协商的协议

.protocol

请参阅限制说明。

如果是在iOS上则返回true

.ios

如果是在Android上则返回true

.android

移除事件监听器

.removeEventListener (事件名称,函数)

.off(事件名称,函数)

参数
  • 事件名称 - (字符串) - 事件名称(open,close,message,error)
  • 函数 - (可选函数) - 如果您没有传递任何函数到此处;这将移除该事件的全部事件监听器,否则它将只移除那个事件监听器。

检查是否打开

.isOpen()

如果连接打开则返回true

检查是否关闭

.isClosed()

如果连接关闭则返回true

检查是否正在连接

.isConnecting()

如果连接正在连接则返回true

检查连接是否正在关闭

.isClosing()

如果在关闭过程中则返回true

教程

需要更多帮助来使用NativeScript WebSocket?请查看关于NativeScript的这些教程。