【问题标题】:Hosting multiple instances of a node.js server托管 node.js 服务器的多个实例
【发布时间】:2013-07-29 22:49:31
【问题描述】:

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

这是场景:

  • 您登录网站
  • 您选择聊天室或创建聊天室
  • 您加入该单独的聊天室,而其他聊天室同时进行

在网络上相当标准的操作,但我还没有找到一种方法来做到这一点。具体来说,如何在您的域上托管它。

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

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

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

【问题讨论】:

    标签: node.js socket.io hostmonster


    【解决方案1】:

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

    例如,

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

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

    【讨论】:

    • 是的,这是一个很好的开始。我有这样的想法,这样的事情可能是可行的,但它可能会造成一些令人头疼的问题。我会让你知道它是如何展开的。
    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 2018-11-16
    • 2012-02-24
    • 2015-05-06
    • 1970-01-01
    • 2020-01-05
    • 2017-10-20
    相关资源
    最近更新 更多