我正在使用Node.js编程的Websocket服务器,我计划向超过20,000个用户发送多播消息。该消息将定期发送一段时间,但我担心Node.js服务器的性能。
我理解Node.js异步工作并根据需要创建和销毁线程,但我不确定它的效率。理想情况下,我想发送平均延迟为5毫秒的消息。
目前,我通过运行所有连接客户端的for循环向所有用户发送消息,如下所示:
function StartBroadcastMessage()
{
console.log("broadcasting socket data to client...!");
for(var i=0;i < clientsWithEvents.length;i++){ //Runs through all the clients
client = clientsWithEvents[i];
if(client.eventid.toLowerCase() == serverEventName.toLowerCase()) //Checks to see if the Client Event names and server names are the same
client.connection.sendUTF(GetEventSocketFeed(client.eventid)); //Sends out event data to that particular client
}
timeoutId = setTimeout(StartBroadcastMessage,2*1000);
}
这是一种发送低延迟多播消息的有效方式,还是有更好的方法?
此外,是否有一种有效的方法在服务器上执行负载测试,模拟连接到Websocket服务器的多个设备? (到目前为止,我已找到此节点应用https://github.com/qarea/websockets-stress-test)
答案 0 :(得分:1)
您可以将socket.io用于广播信息。
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.broadcast.emit('user connected');
});
这样可以避免在向客户端发送单个消息时出现延迟(迭代所有套接字对象和格式化消息)。