我一直在四處想看看是否有人遇到了這一點,但我有點不期待,這就是我發現了什麼。單進程多線程socket.io在Node.js應用程式
我面對現在的問題是關係到我正在創建的應用程序架構的問題; node.js中的遊戲服務器到目前爲止,服務器啓動時只需一個「管理者」進程即可控制所有子進程。遊戲的每個「區域」或「區域」使用cluster.fork()
使用單獨的過程分解,以便每個「區域」可以在服務器上擁有自己的線程,以優化服務器在以下位置運行多個「區域」的能力:一旦。
我現在面臨的困境是這樣的。由於每個「區域」都在一個線程中運行,並且該線程已經每秒運行復雜的3D數學運算X次,以保持「區域」同步,所以我不想打開Socket.io(通信用於與遊戲客戶端交談的庫)在同一個線程中。我想我掛在哪裏是在主進程中使用cluster.on('message')
處理程序的性能,並使用process.send({...})
將來自Socket.io的消息傳遞到主進程中。
我想看看別人有經驗,用這個或知道一個基本的層面怎麼說整個集羣模塊的作品,基本上這樣的:
它更快打電話:
var io = require('socket.io').listen(1337);
io.sockets.on('connection',...); //map all the functionality here in the "zone" thread
或者做一些更是這樣的:
var cluster = require('cluster');
var io = [];
//arbitrary number for the thread count, not important for theory testing
for(var i = 0; i < 4; ++i) {
var process = cluster.fork({...});
process.on('message',myRelayFunction);
io.push(process);
}
假設,當然了cluster.fork()
呼叫管道進入一個腳本,什麼也沒做,但打開socket.ioç連接並將來自各種客戶端的消息轉發到「區域」過程。
我試圖在這個運行性能測試,但我發現這很難說,如果這是快還是沒有,因爲我有困難的飽和與機器的連接,以獲得輸出與測試。
我要確保這是可伸縮的,這樣較重的負載下,應用程序可以讓多個CPU內核的服務器上物盡其用。所以當然說我應該將socket.io監聽器多線程化爲多個線程,但是我擔心的是,因爲他們在技術上都回到單線程進程中,所以不會讓我多任何可能的性能增加 - 解讀他們?我在這裏的測試/基準測試部門空洞起來,我不知道這些理論背後的理論足以說明這裏最好的基本方法......所以我非常感謝任何反饋/輸入任何人有此;)
你真的在這裏天才布賴恩... –