0

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

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

聊天文件可以用 JSON 格式格式化,这样只有最后一个聊天者的消息被带到 DOM(或者在文件更新时可以有效地“获取”消息)。

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

4

3 回答 3

4

fs.watchFile()可用于监视本地文件系统(在服务器上)中文件的更改。这不能解决您在浏览器中更新所有客户端聊天消息的需要。你仍然需要网络套接字、AJAX 或 Flash(或处理所有这些的 socket.io)。

您通常可以在客户端中尝试使用 Web Sockets。如果浏览器不支持,请尝试使用 XMLHttpRequest。如果失败,则回退到 Flash。要做很多编程,而且还必须由 node.js 服务器处理。Socket.io 为您做到这一点。

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

于 2013-10-17T05:34:22.437 回答
2

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

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

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

于 2013-10-17T05:34:36.693 回答
0

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

长池化

基本上长池处理 Ajax 请求和服务器响应时间。

如果没有通知或消息,服务器将在一定时间后(如 50 秒后)响应,否则它将在客户端收到响应时从客户端响应数据和客户端 javascript 再次请求新更新并等待响应此过程是无止境的直到服务器运行

于 2018-02-03T08:22:35.443 回答