2016-10-15 82 views
0

我被檢查出簡單的節點JS &插座聊天模式,和我做了一個小的變化 - 當用戶創建與服務器套接字連接,他發出25萬的消息事件。服務器應該通過向所有其他參與者發送這些消息作出響應,並且它可以工作。 的問題是,由於某種原因,只有第一個用戶完成後,將所有25萬的消息,其他用戶得到的第一個消息。 想要的結果是某種用戶和服務器的並行執行。插座發出一個循環延遲服務器響應

我使用本地主機/ 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

MDN

甲JavaScript運行包含消息隊列,這是消息的一個列表被處理。一個函數與每條消息相關聯。當堆棧爲空時,將從隊列中取出一條消息並進行處理。處理包括調用關聯的函數(從而創建初始堆棧幀)。當堆棧再次變空時,消息處理結束。

變速器在loopback接口是非常快的。這可能是因爲您填寫與WebSocket的message事件node.js的消息隊列它有機會處理相應的回調和broadcast.emit事件添加到隊列甚至在。嘗試在客戶端添加10-100毫秒的延遲來模擬真實網絡。