sta*_*ers 16 websocket node.js ws
我正在尝试做一个非常基本的网络套接字,但我不明白为什么我没有得到一个字符串。
我正在使用wsnpm 的模块作为服务器。https://github.com/websockets/ws
客户:
let socket = new WebSocket('wss://upload.lospec.com');
socket.addEventListener('open', function (event) {
socket.send('test');
});
Run Code Online (Sandbox Code Playgroud)
服务器:
const wss = new WebSocket.Server({ server });
wss.on("connection", function (ws) {
ws.on("message", function (asdfasdf) {
console.log("got new id from client",asdfasdf);
});
Run Code Online (Sandbox Code Playgroud)
服务器结果:
got new id from client <Buffer 74 65 73 74>
Run Code Online (Sandbox Code Playgroud)
尝试遵循文档上的示例以及本教程:https://ously.com/blog/web-app-websockets-nodejs
但它并没有像两个地方所承诺的那样像一条线一样出来。
为什么这不以字符串形式出现?
Che*_*yDT 38
ws您可能使用与教程不同的版本。看起来教程使用的是 v8 之前的版本,而您使用的是 v8+ 版本。
来自8.0.0 的变更日志:
文本消息和关闭原因不再解码为字符串。它们作为 s 传递
Buffer给各自事件的侦听器。事件的侦听器'message'现在采用布尔参数来指定消息是否为二进制 (e173423)。可以通过显式解码缓冲区来迁移现有代码。
Run Code Online (Sandbox Code Playgroud)websocket.on('message', function message(data, isBinary) { const message = isBinary ? data : data.toString(); // Continue as before. });Run Code Online (Sandbox Code Playgroud)websocket.on('close', function close(code, data) { const reason = data.toString(); // Continue as before. });
这也描述了解决方案。
或者,您可以降级到 7.5.0 版本,以与教程使用的版本ws保持一致:
npm i ws@7.5.0
Run Code Online (Sandbox Code Playgroud)
关于库文档中“发送和接收文本数据”的示例:我认为这是他们的一个疏忽,在 v8 发布时这个示例没有更新。您可以在 GitHub 上打开问题让他们知道。
| 归档时间: |
|
| 查看次数: |
14946 次 |
| 最近记录: |