【问题标题】:How to send real time notification to single user using node.js and PHP如何使用 node.js 和 PHP 向单个用户发送实时通知
【发布时间】:2014-11-29 15:59:38
【问题描述】:

我正在尝试将实时通知与 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);
});

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

例如,一个用户可以向另一个用户发送一个微笑,这样只有第二个用户而不是所有用户都应该收到通知。

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

【问题讨论】:

  • 这与 PHP 或 Symfony 无关。它的核心也与 Node.js 没有任何关系。您要问的是特定于 Socket.IO 的。我建议编辑您的问题,并阅读与您所问问题非常相似的众多问题之一:stackoverflow.com/a/11356019/362536 这真的就像发射到与您要发送到的任何连接相关联的套接字一样简单。
  • 感谢您为我指明正确的方向。这个答案有帮助,很抱歉它没有出现在我的研究中。
  • 别担心,它发生了!通常很难开始,因为在找到之前我们不知道要寻找什么。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢伙计。正如你所知道的,我真的是实时应用程序的初学者,所以对此不确定。如果可能的话,您能否指出正确的教程或来源,其中对所有这些都进行了更详细的解释?
    • @KaranKhanna - 我不知道这方面的教程。如果您可以在问题中添加您如何知道要发送给哪个用户,那么我们可以帮助您跟踪正确的信息以便能够做到这一点。除非您使用内置的聊天室,否则您必须发明自己的系统来知道要发送到哪个套接字。socket.io 代码非常好,但文档很浅。
    • @KaranKhanna - 你可以看到服务器端.on("connection", function(sock) {...})事件的所有连接套接字。
    • 谢谢。正如布拉德在评论中指出的那样,另一个问题对此有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2020-11-30
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多