繁体   English   中英

没有Socket.IO的Node.js聊天

[英]Node.js chat without Socket.IO

我刚开始学习Node.js,并且在学习fs.watchFile()方法时,我想知道是否可以使用fs.writeFile()fs.writeFile() )有效地构建一个聊天网站,是稳定的,但我认为不是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套接字)的浏览器支持。

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

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

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

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

长池

在Ajax请求和服务器响应时间上,基本上是长时间的池化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM