README
wscio
长连接通讯库-客户端
API
3 客户端 3.1 wscio
wscio
作为独立生成中的
wscio
命名空间暴露,或调用require('wscio')
<script>
const socket= wscio('http://127.0.0.1');
</script>
const wscio= require('wscio')
//或者使用import 语法
import { wscio } from 'wscio'
wscio.protocpl
3.1.1
- Number
解析协议版本号
wscio([url][,optiosn])
3.1.2
url
(string) (默认为 window.location)options
(object)
forceNew
? (boolean) 是否重用现有连接query
? (string) 第一次请求连接时URL
请求参数nsp
? (string) 命名空间auth
? (string | object) 命名空间连接时验证参数- ... 其余参数在
Client
实例时所需参数- Return:
Socket
为给定的URL创建新的管理器,并尝试在后续调用中重用现有的管理器,除非用false传递多路复用选项。传递此选项等同于传递
force new connection:true
或forcenew:true
。
有关可用选项的列表,见 new Client(url[, options])
3.1.3 带多路复用
默认情况下,连接到不同命名空间时使用单个连接(以最小化资源)
const wscio= require('wscio')
const socket= wscio()
const test =wscio('/test')
// 将建立单一连接
使用forceNew选项可以禁用该行为:
const wscio= require('wscio')
const socket = wscio();
const test = wscio('/test',{forceNew:true})
// 将创建两个不同的连接
3.1.4 自定义路径
const wscio = require('wscio')
const socket = wscio('http://127.0.0.1',{
path:"/mypath"
})
// 服务端
const wss = new require('wssio')({
path:"/mypath"
})
请求的
URL
会像:127.0.0.1/mypath
3.1.5 查询参数
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1?token=abc');
// 服务端
functionverifyClient(data, callback) {//这样能彻底断开连接
const url = data.req.url;
//处理逻辑
callback(); //传入处理结果
}
const wss = new require('wssio')({
verifyClient,
})
// 中间件验证并不能断开socket原始连接
wss.use((socket,next)=>{
const token = socket.handshake.query.token;
if (isValid(token)){
return next();
}
return next(new Error('验证失败'))
})
// 然后
wss.on('connection', (socket) => {
const token= socket.handshake.query.token
})
3.1.6 自定义解析器
待完成
Client
3.2 3.2.1 new Client(url[,options])
url
(string)options
? (object)Return
: Client
可用的选项:
选项 | 默认值 | 描述 |
---|---|---|
path |
/wssio |
在服务器端捕获的路径的名称 |
reconection |
true |
是否自动重新连接 |
reconnectionAttempts |
Infinity |
放弃前重新连接尝试的次数 |
reconnectionDelay |
1000 |
在尝试重新连接之前,最初等待多长时间(1000 )。受+/- randomizationFactor 的影响,例如,默认初始延迟将在500到1500毫秒之间。 |
reconnectionDelayMax |
5000 |
重新连接之间等待的最长时间(5000 )。每次尝试都会增加2倍的重新连接延迟,并随机分组,如上所述。 |
randomizationFactor |
0.5 |
0 <= randomizationFactor <= 1 |
timeout |
20000 |
在发出connect_error 和connect_timeout 事件之前的连接超时 |
authConnect |
true |
如果设置为false ,则必须在确定合适时调用client.open |
query |
{} |
连接命名空间时发送的其他查询参数(然后在服务器端的socket.handshake.query 对象中找到) |
parser |
- | 要使用的解析器。默认为wssio附带的解析器实例。请参见wssio-parser。 |
protocols |
- | 子协议列表(参见MDN参考)(仅适用于WebSocket传输)。 |
运行与
Node
端时ws
库基本客户端选项参见 ws库文档
Socket
3.3 socket.id
3.3.1
- (string)
socket
会话的唯一标识符。在触发connect
事件后设置,并在reconnect
事件后更新。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
console.log(socket.id) //undefined
socket.on('connect',()=>{
console.log(socket.id) // xxxx...
})
socket.connected
3.3.2
- (boolean)
socket
是否连接到服务器。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
console.log(socket.connected) //false
socket.on('connect',()=>{
console.log(socket.connected) //true
})
socket.disconnected
3.3.3 socket.open([value])
3.3.4
auth
?: object | string 连接时上传的认证参数Return
:Socket
手动打开
socket
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1', {
autoConnect:false
})
// ...
socket.open() //手动打开连接
它还可用于手动重新连接:
socket.on('disconnect',()=>{
socket.open()
})
socket.connect()
3.3.5 同
socket.open()
,但不支持参数
socket.send([...args][,ack])
3.3.6
args
: (any) 数据列表,可以时多个ack
: (function) 回执函数Return
:Socket
socket.emit(event,[...args][,ack])
3.3.7
event
: (string) 事件名args
: (any) 数据列表ack
: (function) 回执函数Return
:Socket
向字符串名称标识的socket发出事件。可以包括任何其他参数。支持所有可序列化的数据结构,包括`Buffer。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('connect', function() {
socket.emit('event', arg1, arg2, ...)
socket.emit('event', { data: new Buffer(6) })
//ack参数是可选的,将通过服务器应答调用。
socket.emit('event1', 'data', function(data) {
console.log(data) // data 将是 'data1'
})
})
// 服务器:
const wss = new require('wssio')()
wss.on('connection', (socket) => {
socket.on('event1',(name,fn)=>{
fn('data1');
})
})
socket.on(event,callback)
3.3.8
event
: (string) 事件名callback
: (function) 接收事件响应数据
为给定事件注册新的处理程序。
socket.on('event', function(data) {
console.log(data)
})
// 多个参数
socket.on('event', function(arg1, arg2, arg3, ...) {
// ...
})
// 使用回调
socket.on('event', function(cb) {
cb(0)
})
// 使用参数+回调
socket.on('event', function(arg1, arg2, arg3, ..., cb) {
cb(0)
})
socket
实际上继承了Emitter
类的每个方法,比如hasListeners
,once
或off
(删除一个事件监听器)
socket.compress(compress)
3.3.9
compress
: (boolean) 是否压缩数据传输标志Return
:Socket
为后续事件发送设置一个修饰符,该修饰符只在值为
true
时压缩事件数据。不调用方法时默认为true
。
socket.compress(false).emit('event', { data: new Buffer(1024) })
socket.close()
3.3.10
Return
:Socket
手动断开
socket
。
socket.disconnect()
3.3.11 同 socket.close()相同
event:connect
3.3.12 第一次连接成功时触发。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('connect', function() {
//第一次连接成功触发事件
})
// 注意:您应该在connect之外注册事件处理程序,
// 因此重新连接时不会再次注册它们
socket.on('myevent',()=>{
// ....
})
event:connect_error
3.3.13
error
: (object) 错误对象
在连接错误时触发
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('connect_error', function(error) {
// error为错误信息
})
event:error
3.3.14
error
: (object) 错误对象
发生错误时触发。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('error', function(error) {
// error为错误信息
})
event:disconnect
3.3.15
reason
: (string | number) '值为客户端断开连接
时为客户端断开',值为3666
时为服务器端授权失败被动断开,其余值根据具体情况考虑
断开时触发
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('disconnect',(reason)=>{
if(reason.code !== 3666 && reason != '客户端断开连接'){
// 断开连接是由服务器启动的,需要手动重新连接
socket.connect()
}
// 否则,socket将自动尝试重新连接
})
event:reconnect
3.3.16
attempt
: (number) 重新连接尝试次数
在成功重新连接时触发。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('reconnect',(attemptNumber)=>{
//重连成功触发,不在触发connect事件
})
event:reconnect_attempt
3.3.17
attempt
: (number) 重新连接尝试次数
试图重新连接时触发。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.io('reconnect_attempt',(attemptNumber)=>{
//试图重新连接时触发
})
event:reconnecting
3.3.18
attempt
: (number) 重新连接尝试次数
正在试图重新连接时触发。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('reconnecting',(attemptNumber)=>{
//正在试图重新连接时触发。
})
event:reconnect_error
3.3.19
error
: (object) 错误对象
在重新连接尝试错误时触发。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('reconnect_error',(error)=>{
//在重新连接尝试错误时触发。
})
event:reconnect_failed
3.3.20 在
reconnectionAttempts
(尝试重连)内无法重新连接时触发
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('reconnect_failed',()=>{
//在 `reconnectionAttempts` (尝试重连)内无法重新连接时触发
})
event:ping
3.3.21 在将ping数据包写入服务器时触发。
const wscio = require('wscio')
const socket= wscio('http://127.0.0.1')
socket.on('ping',()=>{
//在将ping数据包写入服务器时触发。
})