我刚刚开始学习Node.js,当我学习fs.watchFile()
方法时,我想知道是否可以使用它(和fs.writeFile()
)高效构建聊天网站,例如Socket .IO这是稳定的,但我相信不是100%稳定(几个后退,包括闪光)。
使用fs.watchFile
或许也可以用来简单地保存聊天记录(因为JSON会在现场使用)。
聊天文件可以用JSON格式化,只有最后一个聊天者的消息才会被提交给DOM(或者在文件更新时提高信息'获取'消息的效率)。
我还没有尝试过,因为我仍然需要了解更多关于Node的知识,甚至可以将它与Socket.IO进行比较,但您对它的看法是什么?这可能是一种有效/稳定的聊天方式吗?
答案 0 :(得分:4)
fs.watchFile()
可用于监视本地文件系统(服务器上)中文件的更改。这无法解决您在浏览器中更新所有客户端聊天消息的需求。您仍然需要Web套接字,AJAX或Flash(或socket.io,它处理所有这些)。
您通常在客户端中执行的操作是尝试使用Web套接字。如果浏览器不支持它们,请尝试使用XMLHttpRequest。如果失败,则回退到Flash。要做很多编程,它也必须由node.js服务器处理。 Socket.io为你做到了。
另外,socket.io非常稳定。回退到Flash不是因为它不稳定,而是由于缺乏浏览器支持更好的解决方案(如Web套接字)。
答案 1 :(得分:2)
在flatfile中存储聊天文件JSON不是一个好主意,因为如果要操作文件,则必须解析并序列化整个JSON对象,随着JSON对象的大小增加,这些对象会变得非常慢。文件系统模块的监视方法也不适用于所有操作系统。
你也无法将Node.js与Socket.IO进行比较,因为它们完全不同。 Socket.IO是一个Node模块,用于在浏览器和服务器之间进行实时传输。你需要什么取决于你在做什么。如果您需要聊天记录,那么您应该使用MongoDB或MySQL等数据库。查看文件以进行更改不是一种有效的方法,您应该只在收到消息时发送消息。
总而言之,使用fs.watchFile()
和fs.writeFile()
是一个非常糟糕的主意,因为竞争条件会因并发文件写入而发生,此外fs.watchFile()
使用轮询来检查文件是否存在已经改变。您应该使用Socket.IO并将消息推送到其他客户端/将它们存储在数据库中,因为它们已被接收。
答案 2 :(得分:0)
You can use long pooling method using javascript setTimeout and setInterval
long pooling
basically long pooling working on Ajax reqest and server responce time.
server will respond after a certain time (like after 50 seconds ) if there is not notification or message else it will respond with data and from client side when client gets response client javascript makes another request for new update and wait till response this process is endless until server is running