节点.js无需 Socket.IO 即可聊天

Node.js chat without Socket.IO

本文关键字:聊天 IO Socket js 无需 节点      更新时间:2023-09-26

我刚刚开始学习 Node.js当我学习fs.watchFile()方法时,我想知道是否可以用它有效地构建聊天网站(和fs.writeFile()),例如 Socket.IO 它是稳定的,但我相信不是 100% 稳定(几个回退,包括 flash)。

使用fs.watchFile也许也可以用来非常简单地保留聊天的历史记录(因为JSON将在现场使用)。

聊天

文件可以用JSON格式化,这样只有最后一个聊天者的消息才会被带到DOM(或者任何使文件更新时有效地"获取"消息的方式)。

我还没有尝试过,因为我仍然需要更多地了解 Node,甚至更多才能将其与 Socket.IO 进行比较,但你对此有何看法?这可能是一种高效/稳定的聊天方式吗?

fs.watchFile()可用于

监视本地文件系统(在服务器上)中对文件的更改。这不会解决您在浏览器中更新所有客户聊天消息的需求。你仍然需要Web套接字,AJAX或Flash(或 socket.io,它处理所有这些)。

在客户端中通常可以执行的操作是尝试使用 Web 套接字。如果浏览器不支持它们,请尝试使用 XMLHttpRequest。如果失败,请回退到 Flash。这需要大量的编程工作,并且还必须由node.js服务器处理。Socket.io 为你做到这一点。

此外,socket.io 非常稳定。回退到Flash不是因为它的不稳定,而是由于缺乏浏览器对更好的解决方案(如Web Sockets)的支持。

聊天文件存储在平面文件 JSON 中不是一个好主意,因为如果要操作文件,则必须解析和序列化整个 JSON 对象,随着 JSON 对象大小的增加,这将变得非常慢。文件系统模块的监视方法也不适用于所有操作系统。

您也不能将 Node.js 与 Socket.IO 进行比较,因为它们是完全不同的东西。 Socket.IO 是一个 Node 模块,用于在浏览器和服务器之间实时传输。你需要什么取决于你在做什么。如果您需要聊天记录,那么您应该使用MongoDB或MySQL等数据库。监视文件的更改不是一种有效的方法,您应该在收到消息时发送消息。

结论不,使用 fs.watchFile()fs.writeFile() 是一个非常糟糕的主意,因为竞争条件会因并发文件写入而发生,除此之外,fs.watchFile()使用轮询来检查文件是否已更改。相反,您应该使用 Socket.IO 并将消息推送到其他客户端/在收到消息时将它们存储在数据库中。

您可以使用 javascript setTimeout 和 setInterval 的长池化方法

长池化

基本上在 Ajax 频率和服务器响应时间上工作的长池化。

服务器

将在一定时间后(例如 50 秒后)响应,如果没有通知或消息,否则它将使用数据响应,当客户端获得响应时,客户端 JavaScript 发出另一个新更新请求并等到响应 这个过程是无休止的,直到服务器运行