让node.js / socket.io响应两个不同的事件

时间:2013-01-21 20:41:36

标签: node.js socket.io

我是node.js和socket.io的新手。我有一个测试服务器,其中包含来自socket.io站点(http://socket.io/#how-to-use)的示例代码。

我不知道从哪里开始做以下

  • 浏览“page1”并让节点知道我是user1
  • 浏览“page2”,让节点知道我是user2
  • 同步,例如user1和user2分别在“page1”和“page2”上的某个地方输入,并在两个页面上显示user1和user2中的所有单词。

我想我需要在node.js应用程序的服务器端“handler”函数中创建某种路由,但我不确定这是否是正确的方法。

有人可以帮我指出正确的方向吗?

非常感谢帮助新手!

1 个答案:

答案 0 :(得分:0)

Socket.io让这很容易。它有名称空间和房间。例如,要创建两个不同的命名空间,您可以这样做:

var io = require('socket.io').listen(app, {origins: '*:*', log: false});

var page1 = io.of('/page1').on('connection', function (socket) {
  //you can use socket in here
});

var page2 = io.of('/page2').on('connection', function (socket) {
  //you can use socket in here
});

您现在有两个名称空间。在每个人的内心,你可以听取事件。例如,如果您发送了类型事件:

socket.on('type', function(text){
  io.sockets.emit('type', {'whatWasTyped': text]);
}

这会向所有连接的客户端发送一个类型事件。

如果您想要更多地分隔名称空间,您可以创建房间。以下是如何在命名空间中创建房间:

var page1 = io.of('/page1').on('connection', function (socket) {
  socket.on('add', function(area){
    socket.join(area);
  };
});

每次与想要加入的房间建立连接时,您都必须发送添加事件。然后,您可以只向该房间发送消息。

io.of('/users').in(area).emit('event', {'event': yourInfoHere});

您可以通过运行以下方式获取有关连接的信息:

socket.get('user', function(err, info){ //in here });

这是我头脑中的一些信息,来自socket.io wiki:https://github.com/LearnBoost/socket.io/wiki/Rooms

我还没有测试过,如果你还有其他一些问题,请告诉我。