托管node.js服务器的多个实例

时间:2013-07-29 23:39:42

标签: node.js socket.io hostmonster

我是node.js的新手,我正在学习如何使用Socket.io在我的域上创建多个聊天服务器。

以下是该方案:

  • 您登录网站
  • 您选择聊天室或创建聊天室
  • 你加入那个聊天室,而其他聊天室同时进行

在网络上进行相当标准的操作,但我还没有找到办法。具体来说,如何在您的域上托管它。

创建和测试时,我总是只使用我的localhost并告诉服务器listen(8000)。但是,如何写一个脚本:

A)为每个新的聊天服务器动态创建一个新的侦听端口?

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

1 个答案:

答案 0 :(得分:0)

您可以从同一台服务器运行所有聊天室,而不是为每个聊天室创建一个单独的服务器,只需将聊天室名称的地图维护到其中涉及的套接字。

例如,

//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 } );
          });
        });
      });
    });   
  });
});

请注意,此代码未经测试,只是一个想法(您应该将其视为更像伪代码)。在断开连接,错误等时,有许多事情无法像清理那样处理。可能有很多其他(和更好的)方法可以实现这一点,但希望它能给你更多的想法。