[英]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.