【问题标题】:NodeJS - Best way to handle private messaging?NodeJS - 处理私人消息的最佳方式?
【发布时间】:2016-06-25 05:09:26
【问题描述】:

我想使用 NodeJS 和 websockets 创建一个私人消息系统。 我想知道创建这样的系统的最佳方法是什么。

最好为每个用户创建 1 个 nodeJS 服务器并绑定监听事件,还是应该为 2 个用户之间的每个对话创建一个唯一的端口/服务器。 即

会话 1(用户 1 和用户 2):端口 8080

会话 2(用户 2 和用户 3):端口 8081

会话 3(用户 1 和用户 3):端口 8082

【问题讨论】:

    标签: node.js chat private


    【解决方案1】:

    创建1个nodeJS服务器并为每个绑定监听事件会更好吗 用户,或者我应该为每个对话创建一个唯一的端口/服务器 2个用户之间。即

    都没有。


    您可以轻松地在两个用户之间创建私人对话,其中一台服务器侦听一个端口并允许用户连接到服务器,然后确定他们想要与哪个其他用户进行私人对话。

    1. 用户在登录并连接到服务器时使用某种凭据向服务器标识自己。然后,您的服务器就会知道哪个用户属于哪个连接。
    2. 然后,服务器可以通过简单地允许用户 A 将消息传递给用户 B (反之亦然)来促进任何两个用户之间的私人对话,但不允许其他任何人访问这些消息。不需要每个用户的私人服务器。不需要自定义端口。您确实需要某种用户身份验证服务,这样您就可以知道哪个用户是哪个具有适当可信度的用户。

    您可以在 socket.io demo chat server 中看到您所询问的部分内容。

    以下是有关其工作原理的更详细说明:

    1. UserA 连接到服务器并识别自己。
    2. UserB 连接到服务器并识别自己。
    3. UserC 连接到服务器并识别自己。
    4. UserA 向服务器发送一条消息,指示服务器向 userC 发送一条私人消息。
    5. 服务器从 UserA 接收该消息并将其转发给 UserC。
    6. UserC 收到来自 userA 的私信。
    7. 服务器不会存储来自 UserA 的消息,也不会将其发送给任何其他用户(因此使其成为私人消息)。
    8. UserC 然后可以使用相同的机制响应 UserA。

    注意:几乎任何方案都要求您同时拥有用户身份验证和用户标识符。然后,您还必须在用户界面中显示它,以便给定用户可以识别他们希望与哪个当前连接的用户进行通信。

    【讨论】:

    • 我正在使用一个登录系统,每个用户都有一个唯一的电子邮件地址。当用户成功登录时,会创建两个 PHP 会话:一个具有唯一的用户 ID,另一个具有唯一的电子邮件地址。当用户登录并单击右键时,会显示一个弹出模式,其中包含 nodeJS 服务器/端口连接的用户列表。我正在使用这样一个很棒的 codepen 用户界面:link 因此,由于信息存储在 PHP 会话中,我如何在 JavaScript (nodeJS) 中识别哪个用户想要向其他人发送消息?
    • @Piet - 您需要访问 node.js 中的会话。我不知道您是否可以从 node.js 访问 PHP 会话。这取决于您的部署的一系列特征和会话中的 cookie 设置。如果 node.js 服务器是 PHP 服务器的子域,那么您可以配置 PHP cookie 以允许从 node.js 子域服务器访问。但是,即使那样,我也不知道这是否会对您有所帮助。您在这里使用多个服务器架构并需要在它们之间共享登录,这让事情变得非常复杂。
    • @Piet - 你能在一个系统中完成整个服务器,这样你就不必在服务器之间共享登录会话了吗? socket.io 可以从 PHP 中使用,或者 node.js 可以完成您应用程序的其余部分。
    • 感谢您的帮助!所以你建议我应该在 websockets 中为 PHP 编写整个消息系统?
    • @Piet - 实际上,因为我喜欢 node.js,所以我会在 node.js 中编写整个代码。但是,关键是混合系统让事情变得更难而不是更容易。
    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 2020-11-27
    • 2020-08-01
    • 2018-11-18
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多