簡體   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