我正在尝试做一个非常基本的WebSocket,但我不明白为什么我没有得到一个字符串回来。
我正在为服务器使用npm的ws
模块https://github.com/websockets/ws
委托人:
let socket = new WebSocket('wss://upload.lospec.com');
socket.addEventListener('open', function (event) {
socket.send('test');
});
伺服器:
const wss = new WebSocket.Server({ server });
wss.on("connection", function (ws) {
ws.on("message", function (asdfasdf) {
console.log("got new id from client",asdfasdf);
});
服务器结果:
got new id from client <Buffer 74 65 73 74>
尝试按照文档中的示例以及本教程进行操作:https://ably.com/blog/web-app-websockets-nodejs
但它并不像两个地方承诺的那样像一根绳子一样出来。
为什么它不是以字符串的形式出现?
3条答案
按热度按时间piwo6bdm1#
您可能使用了与教程不同的
ws
版本。看起来教程使用的是比v8更旧的版本,而您使用的是v8+版本。从changelog for 8.0.0:
文本消息和关闭原因不再解码为字符串。它们作为
Buffer
传递给各自事件的侦听器。'message'
事件的侦听器现在接受一个布尔参数,该参数指定消息是否为二进制(e173423
)。可以通过显式解码缓冲区来迁移现有代码。
第一个
这也描述了解决方案。
或者,您可以降级到
ws
的7.5.0版,以与本教程使用的版本相同:关于库文档中的示例“发送和接收文本数据”:我相信这是他们的疏忽,这个例子在v8发布时没有更新。你可以在GitHub上打开一个问题让他们知道。
cngwdvgl2#
在最新版本中,打印接收到的消息时需要提供**%s**。下面是来自npm WebSocket官方页面的简单代码片段。
uklbhaso3#
如果你使用console.log('${data}'),它不会显示〈Buffer。而如果你使用console.log(data),它会显示〈Buffer。
你可以说是一个错误或正常。
改变方法:
或