目前我的“广播”问题似乎没有通过超级简单的websocket设置正常运行,我开始在Node中。这是我第一次使用websockets,所以我可能会遗漏一些非常明显的东西,但在网上看了一段时间之后,我无法找到解决方案。
基本上我只是想把一些json推送到所有当前连接的客户端。
我可以确认该套接字是否正常工作,因为当我在ws:// localhost:3000连接时,我能够在'connection'块中的'ws.send'上看到静态连接字符串,以及看到多个套接字如果我连接多个客户端,客户端将从广播方法注销。
对于我可能遗失的任何帮助都将不胜感激,
var WebSocketServer = require('uws').Server;
var wss = new WebSocketServer({ port: 3000 }); // ws://localhost:3000
// Static test var
var test_message = {
'test': 'Response',
'test2': 'Response2'
};
// Broadcast to all.
wss.broadcast = function broadcast(data) {
wss.clients.forEach(function each(client) {
console.log('IT IS GETTING INSIDE CLIENTS');
console.log(client);
// The data is coming in correctly
console.log(data);
client.send(data);
});
};
wss.on('connection', function(ws) {
ws.on('message', function(message) {
wss.broadcast(test_message);
console.log('Received: ' + message);
});
// TODO This is static just to check that the connection is properly working
ws.send('You successfully connected to the websocket.');
});
答案 0 :(得分:2)
我使用Smart Websocket Client
测试了您的代码。你的代码很好。如果您广播仅包含string
的数据,则可以在用户界面中看到回复,但对于javascript
object
,虽然您可以看到响应为Binary Frames (opcode = 2)
,但客户端仍无法显示} Chrome Developer Tools
。
此行为背后的原因是ws.send()
方法支持普通字符串,类型化数组或blob,但发送类型化数组和blob将导致客户端接收的帧作为二进制帧(opcode = 2)。
您可以尝试JSON.stringify
object
,
wss.on('connection', function(ws) {
ws.on('message', function(message) {
wss.broadcast(JSON.stringify(test_message));
console.log('Received: ' + message);
});
ws.send('You successfully connected to the websocket.');
});