0

我在我的网站上建立了一个通知系统。我有一些成员团体。当某个组的成员发布内容时,应通知同一组的其他成员。用户刷新页面时会出现通知。然而,世界正在实时运行。谷歌搜索这个问题向我推荐了 Node.js(不确定是最好的方法)。我现在可以:创建服务器,连接到数据库,查询数据库,使用 socket.io 向所有连接的客户端发送广泛的消息......
但到目前为止我无法做/理解的是指定哪些用户应该传递消息(通知)。
环顾四周,这种方式看起来是我想要的:

var socket = io.listen(server);
socket.on('connection', function(client) {
  client.on('message', function(msg) {
    broadcast(msg); // broadcast message to all clients
    // OR
    socket.clients[session_id].send(msg); // send message to one client
  });

  client.on('disconnect', function( ) {
    console.log('Client Disconnected.');
  });
});

不知道session_id是什么,和用户登录时创建的session_id一样吗?真的厌倦了寻找一些直接的解决方案,任何帮助将不胜感激。

4

3 回答 3

1

创建房间,多个客户端可以是多个房间的一部分,一个房间中的客户端可以广播给房间的所有其他成员。

假设您的消息中有一个房间名称和一个数据正文

socket.on('connection', function(client) {
    client.on('message', function(msg) {
        // broadcast message to all clients
        io.sockets.in(msg.room).emit(msg.data);
        // OR
        socket.clients[session_id].send(msg); // send message to one client
    });

    client.on('disconnect', function( ) {
        console.log('Client Disconnected.');
    });
});

https://github.com/LearnBoost/socket.io 这个应该有一些例子

http://psitsmike.com/2011/10/node-js-and-socket-io-multiroom-chat-tutorial/ 这是一个很好的

于 2012-08-16T18:34:34.840 回答
1

Socket.IO 超级好用。
在这里查看文档:https ://github.com/learnboost/socket.io/

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.join('justin bieber fans');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
});
于 2012-08-16T18:35:14.353 回答
1

这是来自 socket.io 文档的示例:

存储与客户端关联的数据

有时有必要存储与会话期间所需的客户端关联的数据。

服务器端

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.on('set nickname', function (name) {
    socket.set('nickname', name, function () { socket.emit('ready'); });
  });

  socket.on('msg', function () {
    socket.get('nickname', function (err, name) {
      console.log('Chat message by ', name);
    });
  });
});

客户端

<script>
  var socket = io.connect('http://localhost');

  socket.on('connect', function () {
    socket.emit('set nickname', prompt('What is your nickname?'));
    socket.on('ready', function () {
      console.log('Connected !');
      socket.emit('msg', prompt('What is your message?'));
    });
  });
</script>
于 2012-08-16T18:28:54.703 回答