2017-06-18 57 views
1

我正在開發一個網站,我將使用微服務。什麼是使用Socket.io運行多個服務的最佳方式

我將有一個或多個Node.js應用程序使用Socket.io。

我想弄清楚我將如何構建這個。

我可以使用多個Node.js與Socket.io連接到用戶,還是會遇到衝突?我可以使用NGiNX作爲UUID的代理來識別發送請求的微服務。這是否使感覺?有沒有更好的辦法?

或者我也想使用一個Node.js有一個代理接收所有的Socket.io連接,然後它創建一個與用戶的連接。但是這似乎增加了網絡負載,因爲我添加了另一個微服務。

無論如何,我會喜歡你對此的看法。

+1

這是相當困難知道如何不理解你正在試圖解決的實際問題提出意見。建築決策是根據實際問題制定的。 「用socket.io使用微服務」沒有描述這個問題,這只是一種架構策略。 – jfriend00

回答

1

根據你的項目是如何去,它可能會或可能不會是建立微服務通信在Socket.io

想到的是socket.io郵件系統的窮人保障的第一件事情是個好主意特別是您的郵件沒有存儲在磁盤上的事實。雖然這可能很方便,但在構建審計線索,調試或重播時,這也是一個真正的問題。

我看到的另一個問題是可伸縮性/羣集能力:是的,您可以通過一個nodeJS代理進行多項服務通信,但是當您需要添加更多內容時會發生什麼?你如何將消息從一個經紀人傳遞給另一個經紀人?這將導致你建立一個完整的消息系統,你會發現更安全的使用現有的解決方案(RabbitMQ的,卡夫卡......)

0

您可以設置多的NodeJS服務和所有的人都用socket.io- redis lib連接到Redis服務器以共享所有nodejs服務的socketID。這意味着您在Redis服務器上存儲所有套接字信息。當你發出一個事件時,它們將自動發射到所有nodejs服務。

const server = require('http').createServer(); 
 
const io = require('socket.io')(server); 
 
const redis = require('socket.io-redis'); 
 
io.adapter(redis({ host: 'localhost', port: 6379 })); 
 

 
io.on('connection', socket =>{ 
 
    // put socket of user to a room name by user_id 
 
    socket.join(user_id); 
 
}); 
 

 
// emit an event to a specify user, all nodejs keep that user connection will be emit 
 
io.to(user_id).emit('hello', {key: 'ok'})

相關問題