0

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

我不知道从哪里开始执行以下操作

  • 冲浪到“page1”并让节点知道我是user1
  • 冲浪到“page2”并让节点知道我是用户2
  • 同步例如单词 user1 和 user2 分别在“page1”和“page2”的某处键入,并在两个页面上显示来自 user1 和 user2 的所有单词。

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

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

4

1 回答 1

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 。

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

于 2013-01-21T21:07:14.547 回答