为什么收到的 websocket 数据作为缓冲区出来?
Why is received websocket data coming out as a buffer?
我正在尝试做一个非常基本的 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
但它并没有像这两个地方所承诺的那样像字符串一样出现。
为什么这不是字符串形式?
您可能使用了与本教程不同的 ws
版本。好像教程用的是早于v8的版本,而你用的是v8+的版本。
Text messages and close reasons are no longer decoded to strings. They are passed as Buffer
s to the listeners of their respective events.
The listeners of the 'message'
event now take a boolean argument specifying whether or not the message is binary (e173423
).
Existing code can be migrated by decoding the buffer explicitly.
websocket.on('message', function message(data, isBinary) {
const message = isBinary ? data : data.toString();
// Continue as before.
});
websocket.on('close', function close(code, data) {
const reason = data.toString();
// Continue as before.
});
这也描述了解决方案。
或者,您可以降级到 ws
的 7.5.0 版,以与 what the tutorial uses 相提并论:
npm i ws@7.5.0
关于库文档中的示例“发送和接收文本数据”:我认为这是他们的疏忽,因为发布 v8 时没有更新此示例。您可以在 GitHub 上提出问题让他们知道。
我正在尝试做一个非常基本的 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
但它并没有像这两个地方所承诺的那样像字符串一样出现。
为什么这不是字符串形式?
您可能使用了与本教程不同的 ws
版本。好像教程用的是早于v8的版本,而你用的是v8+的版本。
Text messages and close reasons are no longer decoded to strings. They are passed as
Buffer
s to the listeners of their respective events. The listeners of the'message'
event now take a boolean argument specifying whether or not the message is binary (e173423
).Existing code can be migrated by decoding the buffer explicitly.
websocket.on('message', function message(data, isBinary) { const message = isBinary ? data : data.toString(); // Continue as before. });
websocket.on('close', function close(code, data) { const reason = data.toString(); // Continue as before. });
这也描述了解决方案。
或者,您可以降级到 ws
的 7.5.0 版,以与 what the tutorial uses 相提并论:
npm i ws@7.5.0
关于库文档中的示例“发送和接收文本数据”:我认为这是他们的疏忽,因为发布 v8 时没有更新此示例。您可以在 GitHub 上提出问题让他们知道。