这..
用于 Websocket 客户端连接的简单模拟可操作性
通知:叉子
这是它的维护叉。 与上游一揽子方案相比,它最大限度地减少了依赖性.
此软件包发布于 @aptre/it-ws。 。 。 .
目录
安装
$ npm i @aptre/it-ws
使用量
示例 - 客户端
import { connect } from '@aptre/it-ws/client'
import { pipe } from 'it-pipe'
const stream = connect(WS_URL)
await stream.connected() // Wait for websocket to be connected (optional)
pipe(source, stream, sink)
示例 - 服务器
import { createServer } from '@aptre/it-ws/server'
import { pipe } from 'it-pipe'
const server = createServer(stream => {
//pipe the stream somewhere.
//eg, echo server
pipe(stream, stream)
})
await server.listen(PORT)
API 密码
import { connect } from '@aptre/it-ws/client'
connect(url, { binary: boolean })
创建 Websocket 客户端连接 。 设定 binary: true 以获取阵列缓冲(在浏览器上)。 在节点上默认为真,但在浏览器上默认为字符串. 如果您的应用程序假定为二进制, 可能会有问题 .
在 WebSocket 实例中添加选项, 如 网格/ws/blob/master/doc/ws.md#新网格地址-protocols-选项,可以提供对象 websocket 属性输入连接选项.
const stream = connect(url)
// stream is duplex and is both a `source` and `sink`.
// See this for more information:
// https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#duplex-it
import { createServer } from '@aptre/it-ws/server'
创建可同步的websocket服务器 .
createServer(options?, onConnection)
options 使用与 ws 模块
onConnection(stream) 每次收到连接时都会被调用.
示例
您可能想要使用的双倍服务是 粘合剂
import { createServer } from '@aptre/it-ws/server'
import { connect } from '@aptre/it-ws/client'
import { pipe } from 'it-pipe'
createServer({
onConnection: (stream) => {
// pipe duplex style to your service
pipe(stream, service.createStream(), stream)
}
})
.listen(9999)
const stream = client.createStream()
await pipe(
stream,
connect('ws://localhost:9999'),
stream
)
如果连接失败, 溪流会抛出
try {
await pipe(
stream,
connect('ws://localhost:9999'),
stream
)
} catch (err) {
// handle err
}
在 TLS 上运行服务器 :
createServer({
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
// other options
})
.listen(9999)
要在服务器上添加客户端认证, 您可以设置 verifyClient。 。 。 .
这里的文档。 。 。 .
function verifyClient (info) {
return info.secure == true
}
createServer({
verifyClient: verifyClient
// other options
})
使用 http 服务器
如果您有 http 服务器, 您也需要服务
,并想要使用单个端口,使用 server 选项.
import http from 'http'
const server = http.createServer(function(req, res){...}).listen(....)
createServer({
server: server
// other options
})
核心、 websocket 包接功能
这些模块在内部被使用,用来包裹一个websocket. 你可能不需要碰这些, 但不管怎样,它们都是有记录的.
import duplex from '@aptre/it-ws/duplex'
将一网囊变成双相流.
如果提供, opts 转至 sink(socket, opts)。 。 。 .
WebSockets 不支持半开模式. 参见净模块中允许的Half Open选项
如果您有协议假设有半个打开连接, 但正在使用 网络协议,比如不支持的 Websockets,我建议 使用 再见 还有你的 协议.
双层流还将包含来自
成为网页的 http 请求。 他们是 method, (中文(简体) ), url, (中文(简体) ),
headers 财务报告和审定财务报表 upgrade。 。 。 .
还暴露在: import { duplex } from '@aptre/it-ws'
import sink from '@aptre/it-ws/sink'
创建一个 Sink 将数据写入 socket。 。 。 .
opts 也许 {closeOnEnd: true, onClose: onClose}。 。 。 .
onClose 当水槽结束时,会叫它。 若为 closeOnEnd=false
流不会关闭, 它只会停止排放数据.
(默认) closeOnEnd 事实)
若为 opts 是一个函数,那么 onClose = opts; opts.closeOnEnd = true。 。 。 .
import sink from '@aptre/it-ws/sink'
import { pipe } from 'it-pipe'
import each from 'it-foreach'
import delay from 'delay'
// connect to the echo endpoint for test/server.js
var socket = new WebSocket('wss://echo.websocket.org')
// write values to the socket
pipe(
async function * () {
while (true) {
yield 'hello @ ' + Date.now()
}
}(),
// throttle so it doesn't go nuts
(source) => each(source, () => delay(100))
sink(socket)
);
socket.addEventListener('message', function(evt) {
console.log('received: ' + evt.data);
});
还暴露于 import { sink } from '@aptre/it-ws'
import source from '@aptre/it-ws/source'
创建一个 Source 读取来自 socket。 。 。 .
import { pipe } from 'it-pipe'
import source from '@aptre/it-ws/source'
pipe(
// connect to the test/server.js endpoint
source(new WebSocket('ws://localhost:3000/read')),
async (source) => {
for await (const buf of source) {
console.info(buf)
}
}
);
还暴露于 import { source } from '@aptre/it-ws'
许可证
根据其中任何一项颁发的许可证
- Apache 2.0, (英语:自由主义 编号 : http://www.apache.org/licenses/LICENSE-2.0 (中文(简体) )(中文(简体) )
- 麻省理工学院利马 编号 : http://opensource.org/licenses/MIT 互联网档案馆的存檔,存档日期2013-12-02(中文(简体) )
捐款
除非另有明确声明,Apache-2.0许可证中界定的、有意提交供列入作品的任何捐助,应具有上述双重许可证,不附加任何条件.