Javascript Node.js聊天不带Socket.IO

Javascript Node.js聊天不带Socket.IO,javascript,json,node.js,socket.io,Javascript,Json,Node.js,Socket.io,我刚开始学习Node.js,当我学习fs.watchFile()方法时,我想知道是否可以用它(以及fs.writeFile())高效地构建聊天网站,例如Socket.IO是稳定的,但我认为不是100%稳定的(有几个回退,包括flash) 使用fs.watchFile也可以很简单地保存聊天记录(就像现场使用JSON一样) 聊天文件可以用JSON格式化,这样只有最后一个聊天者的消息才会被带到DOM(或者在文件更新时高效地“获取”消息) 我还没有尝试过它,因为我仍然需要了解更多关于Node的信息,甚至

我刚开始学习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套接字)的浏览器支持。

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

您通常可以在客户端中尝试使用Web套接字。如果浏览器不支持它们,请尝试使用XMLHttpRequest。如果失败了,就退回到Flash。这需要进行大量编程,而且还必须由node.js服务器处理。Socket.io会为您做这件事


另外,socket.io相当稳定。回退到Flash并不是因为它不稳定,而是因为缺少对更好解决方案(如Web套接字)的浏览器支持。

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

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


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

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

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


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

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

长池

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


服务器将在特定时间后响应(如50秒后)如果没有通知或消息,则当客户端收到响应时,它将使用数据和来自客户端的响应客户端javascript发出另一个新更新请求并等待响应。此过程是无止境的,直到服务器运行为止。

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

长池

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


如果没有通知或消息,服务器将在特定时间后(如50秒后)响应,否则它将使用数据和来自客户端的响应,当客户端收到响应时,客户端javascript会发出另一个新更新请求,并等待响应,直到服务器运行时,此过程才会结束,这类似于使用AJAX和setInterval在数据变化时轮询数据,有点像是回到石器时代。我将直接使用socket.io并在MongoDB中存储聊天。谢谢。这是个好主意-Socket.IO也经过了战斗测试,可以水平扩展