2013-12-22 31 views
1

我想弄清楚如何水平擴展我的nodejs TCP服務器。nodejs TCP服務器的水平比例

例服務器:

var socketServer = net.createServer(function (socket) { 

     // Identify this client 
     socket.name = socket.remoteAddress + ":" + socket.remotePort 

     // Put this new client in the list 
     clients.push(socket); 
     sockets[socket.name] = socket; 


     // Handle incoming messages from clients. 
     socket.on('data', function (data) { 

       // Write to a specific user 
       var socketName = "xx.xx.xx.xx:56512"; 
       sockets[socketName].write("Hello!"); 

      } 

     }).listen(8080); 

下面的示例存儲在陣列中的各新的連接,以使我們可以寫一個消息給特定用戶在道路上。

我想用haproxy作爲負載均衡器進行擴展。但是,我怎麼能讓我所有的服務器共享相同的連接客戶端數組?

Stickysessions不是一個適用於我的解決方案,因爲兩個人說話(兩個客戶端)可能位於不同的服務器上,所以所有服務器都必須共享相同的連接客戶端陣列。

任何想法如何做到這一點?

一個想法,我有:

  • 是它也許可以存儲在MySQL的每個連接?

編輯 也許實際上這樣做的唯一方法是通過使用Redis? 任何想法,如果這將是一個合適的選擇?負載將會非常沉重

回答

1

1.使用Redis與您的服務器共享您的會話。

2.寫一個登錄服務器,所有用戶都應該登錄到登錄服務器。登錄服務器將生成會話並在Redis服務器上共享會話並返回交易服務器的IP和端口,其次,客戶端接收IP和端口,斷開登錄服務器並連接到事務服務器,

最後,您可以提供多個TCP服務器來處理事務,登錄服務器將通過IP和端口來平衡負載。當然,你可以使用haproxy來做那件事,但我不知道如何配置它。