簡體   English   中英

托管一個node.js服務器的多個實例

[英]Hosting multiple instances of a node.js server

我是node.js的新手,我正在學習如何使用Socket.io在我的域上創建多個聊天服務器。

這是場景:

  • 您登錄該網站
  • 您選擇一個聊天室或創建一個聊天室
  • 您加入了該聊天室,而其他聊天室同時進行

網絡上的操作相當標准,但我還沒有找到一種方法來實現。 具體來說,如何在您的域上托管它。

在創建和測試時,我總是只使用本地主機並告訴服務器listen(8000) 但是,如何編寫以下腳本:

A)為每個新的聊天服務器動態創建一個新的偵聽端口?

B)如何托管(我使用Hostmonster)?

不必為每個聊天室創建單獨的服務器,而是可以從同一服務器運行所有服務器,而只需維護一個聊天室名稱到其中涉及的套接字的映射即可。

例如,

//store a map of chat room name to sockets here
var chatRooms = {};

io.sockets.on('connection', function (socket) {
  //when someone wants to join a chat room, check to see if the chat room name already exists, create it if it doesn't, and add the socket to the chat room
  socket.on('joinChatRoom', function (data.message) {
    var chatRoomName = data.message;
    chatRooms[chatRoomName] = chatRooms[chatRoomName] || [];
    chatRooms[chatRoomName].push(socket);

    //set the chatRoomName into the socket so we can access it later
    socket.set( "chatRoomName", chatRoomName, function() {
      //when we receive a message
      socket.on( "chatMessage", function(data) {
        var chatMessage = data.message;
        //figure out what chat room this socket belongs to
        socket.get( "chatRoomName", function(err,chatRoomName) {
          //iterate over the sockets in the chat room and send the message
          chatRooms[chatRoomName].each(function( chatRoomSocket ) {
            chatRoomSocket.emit("chatMessage", { message : chatMessage } );
          });
        });
      });
    });   
  });
});

請注意,此代碼未經測試,只是一個主意(您可能應該將其視為偽代碼)。 它有很多無法處理的事情,例如在斷開連接,錯誤等情況下進行清理。可能還有很多其他(更好的)方法可以完成此操作,但希望它將為您提供更多的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM