【问题标题】:where are the chat messages stored in socket.iosocket.io 中存储的聊天消息在哪里
【发布时间】:2021-09-01 03:36:23
【问题描述】:

嗨,

当我了解 socket.io 时,我正在开发一个将消息和用户会话存储在文本文件中的 PHP 聊天,我想改用这种方法,因为这似乎可以节省我服务器上的 CPU 使用率(目前我必须对 php 文件进行 GET 请求,以每 2 秒加载一次消息和用户)。

我的问题是,消息是否存储在 socket.io 的某个地方?用户会话及其用户名和个人资料等数据如何?我现在通过 PHP 从数据库中获取所有内容,然后将其存储为临时文本会话文件。

谢谢。

【问题讨论】:

  • Socket.io 需要 NodeJS 服务器,而不是 PHP。您打算如何将 Socket.io 集成到您的应用程序中?
  • (另外,PHP 缺乏请求间状态是考虑完全放弃 PHP 的另一个原因;imo)
  • 我知道。我让我的主机安装了 node.js,所以这很好。我希望用户使用我已经从数据库中获得的数据登录。所以可以说我的第一页是一个 php 页面。这将从数据库中加载数据并将其存储在文本文件中。这就是为什么我问如果存储的话,socket.io 的所有内容都存储在哪里。
  • 你读过 Socket.io 的文档吗? SocketIO 只是一个 WebSocket 库,它没有自己的存储或持久层:这是你的责任。
  • 顺便说一句,您知道 PHP 和 NodeJS 不共享任何状态吗? (例如,您的 PHP $_SESSION 对 NodeJS 不可用,反之亦然)?

标签: socket.io


【解决方案1】:

消息是否存储在 socket.io 的某个地方?

否:Socket.io 只是一个 WebSocket 库。作为应用程序开发人员,您有责任使用 socket.io 接收传入消息,这些消息运行您自己的代码来加载或生成响应,反之亦然。所以问这个问题就像问“这些消息是用 PHP 存储在某个地方的吗?”。

用户会话及其用户名和个人资料等数据如何?

同样,socket.io 只是一个使用 WebSockets 的库。它没有内置任何用户或配置文件管理功能。您有责任将其构建或集成到您的 NodeJS 代码中,然后使用 socket.io

我现在通过 PHP 从数据库中获取所有内容,然后将其存储为临时文本会话文件。

您需要继续这样做(尽管您也应该将聊天消息也存储在数据库中,因为使用文本文件不会扩展到超过少数并发用户)。

请注意,与 PHP 网站不同,NodeJS 应用程序确实具有半持久的内存状态(因此您可以从数据库中加载数据并在请求之间使用它,而不是为每个新页面请求或 websocket 消息重新加载所有内容)但请记住,当 NodeJS 服务器关闭、崩溃或被您的网络主机的管理基础设施杀死时,该状态将丢失。此外,当您最终扩展到多个服务器实例时,每个实例都是相互隔离的,因此它们的内存状态不会被共享。如果您绝对需要共享某种低延迟(但不是内存状态),请考虑使用 memcached 或 Redis 之类的东西。

【讨论】:

  • 我会尽量说得更具体一些。看这里的演示:socket.io/demos/chat 它会提示您输入用户名。在这种情况下,这些数据存储在哪里?
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 2019-03-02
  • 2016-02-21
相关资源
最近更新 更多