我正在查看简单节点js&套接字聊天模型,我做了一点改变 - 当用户创建与服务器的套接字连接时,他发出250,000个消息事件。服务器应该通过向所有其他参与者发送这些消息来响应,并且它可以工作。 问题是,由于某种原因,只有在第一个用户完成发送所有250,000个消息后,其他用户才会收到第一条消息。 想要的结果是用户和服务器的某种并行执行。
我已经使用localhost / 3000和chrome开发者控制台来进行这些测试。 有任何想法吗? 感谢。
server.js:
var PORT = process.env.PORT || 3000;
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(express.static(__dirname + '/public'));
io.on('connection', function (socket){
console.log('user connected via socket.io');
socket.on('message', function(message){
console.log('Message received: ' + message.text);
socket.broadcast.emit('message', message);
} );
socket.emit('message', {
text: 'welcome to chat app'
})
} );
http.listen(PORT, function(){
console.log('server started');
});
app.js:
var socket = io();
socket.on('connect', function (){
console.log('Connected to sockets.io server');
for(var i = 0; i <250000; i++){
socket.emit('message', {
text: 'welcome to chat app'
})
}
} );
socket.on('message', function(message){
console.log('New message ' + counter);
} );
答案 0 :(得分:0)
来自MDN:
JavaScript运行时包含一个消息队列,它是要处理的消息列表。功能与每条消息相关联。当堆栈为空时,将从队列中取出一条消息并进行处理。处理包括调用相关函数(从而创建初始堆栈帧)。当堆栈再次变空时,消息处理结束。
环回接口的传输速度非常快。使用websocket message
事件填充node.js消息队列是可能的,甚至在它有机会处理相应的回调并将broadcast.emit
事件添加到队列之前。尝试在客户端添加10-100毫秒的延迟来模拟真实的网络。