如何使用node.js和PHP向单个用户发送实时通知

时间:2014-10-05 00:35:46

标签: node.js symfony socket.io real-time

我正在尝试将实时通知与Node和socket.io集成到Symfony应用程序中。我已经阅读了很多关于这个主题的信息,并且有一个有效的Node应用程序。

nodeClient.js

var socket = io.connect( 'http://192.168.15.106:8080' );


$('a.sendSmile').click(function(){
    socket.emit( 'message', { name: 'something' } );
});

socket.on('message', function(data){
    console.log(data.name);
});

现在的问题是以上工作完美,我能够立即向所有用户发送实时通知。但是,针对单个用户的最佳方式是什么?

例如,用户可以向另一个用户发送微笑,因此只有第二个用户才能收到通知,而不是所有用户。

我应该为节点创建多个侦听器吗?或其他任何方法吗?

2 个答案:

答案 0 :(得分:0)

您需要某种方法来识别连接到服务器的哪个套接字是您要发送数据的套接字,然后您可以发送到该套接字。您可以在用户连接时跟踪用户名,或者如果您有某个身份验证系统,则可以跟踪哪个套接字属于哪个经过身份验证的用户。

您的服务器包含已连接套接字的列表。每个连接一个,并在连接时触发服务器上的连接事件。您的应用程序需要创建一种方法来了解您要将数据发送到哪些连接的套接字。这不是您已经描述过的关于您希望如何工作的内容,因此我们无法提供更具体的帮助。

答案 1 :(得分:0)

如果您可以区分该用户,则可以向单个用户发送通知。例如,您可以在 nodejs服务器的客户端连接上获得user_iduser_id从客户端发送,内部消息)并将其保存在键值存储中(像Redis,memcache,...)。通过这种方式,您可以正确地分发通知,从服务器(如Symfony2应用程序)到达正确的用户。

我建议您使用Redis作为键值存储,并将其发布/订阅的实现模式用作服务器与实时应用程序之间的通信通道。