gpt4 book ai didi

javascript - 使用 websocket 的聊天应用程序

转载 作者:行者123 更新时间:2023-12-03 08:22:27 24 4
gpt4 key购买 nike

我已经能够使用 Websockets 在使用 https://github.com/ghedipunk/PHP-Websockets 的用户之间创建聊天应用程序。

服务器所做的就是在每个用户连接到套接字时将所有创建的套接字对象变量存储在一个数组中。因此,最终他创建了一个数组,其中包含有关使用套接字对象的所有用户的信息。他每次都会循环遍历该数组以检索用户的对象,以便可以将消息发送到相应的套接字。

这对于少量用户来说没问题。但我们如何处理大量用户呢?我想过将套接字对象存储在数据库中,但后来我遇到了这个:How to save php socket resource in database?

这表示“套接字必须重新创建并且不能存储在数据库中”。

那么,除了重新创建之外,还有更好的选择吗?如果我必须重新创建套接字,我该如何使用 PHP-Websockets 库来完成它?

提前致谢。

最佳答案

套接字无法保存在磁盘上,因为它是现有连接。如果销毁事件对象,连接将关闭并且用户将断开连接。

首先我想提醒您,内存和 CPU 可能不是太重要。 Node.js 解释器实际上速度快得惊人,而且 WebSocket 对象几乎不需要太多内存。您将首先面临其他问题,例如带宽问题、打开的连接过多等。

我能想到的可能的调整:

多线程 - 生成子进程

不过,您可以在 node.js 进程之间共享套接字,如下所述:https://nodejs.org/api/child_process.html#child_process_example_sending_server_object

我不能保证这会提高性能,但它允许您并行处理来自不同用户的输入。我也不知道 WebSockets 是否支持这一点,但我认为是的。

减少套接字开销

记住这一点很重要 - 您不能将套接字对象存储在磁盘上,但可以存储大多数其他内容。套接字对象几乎不需要大量内存,但如果您存储有关用户的其他信息,它可能会减慢您的速度。冗余信息应该存储在数据库或类似的东西提供的后端中。

原生核心

如果您仍然遇到问题,您可以为您的聊天编写 C/C++ native 多线程核心,并让它执行繁重的操作,例如循环通过套接字并向其发送消息。将此核心连接到您的逻辑所在的 Node.js 服务器。也不是说你可以为 Node.js 编写原生插件。

关于javascript - 使用 websocket 的聊天应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33695383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com