2016-09-24 22 views
-1

這是我經過多年閱讀後的第一篇文章。我最近使用MEAN堆棧製作了一個Messenger應用程序。它比一般的socket.io教程和網上的例子更復雜。NodeJS messenger應用程序HTTP和Socket.io - 何時何地?

的MongoDB: 分貝:信使

類別: 用戶 對話 消息

它的一個基本思想: 用戶寄存器(存儲在MongoDB中憑證) 日誌中(護照+ JSON網絡令牌) 選擇一個註冊用戶與 聊天用戶現在可以發送/接收消息。

我的應用程序的工作,但簡單地說,以專家後,昨日,他在這方面我的代碼的NodeJS挑選一些重大漏洞。例如,當HTTP req發送給Node時,在req本身中,我正在運行各種循環和查詢。底線是他告訴我,我不應該在Express路由器中處理db查詢。他的例子是,如果查詢許多對話的大量消息列表,它將會使HTTP請求打開很長時間。

他的想法是,當快遞收到請求後,客戶應立即得到響應,我們發送DB請求事件堆棧,並在完成後節點通過在它自己的時間socket.io響應。這將減少服務器上的負載並「優化」?

我的問題是,有什麼可能'優化'的信使應用程序的概念與概述? (註冊用戶登錄選擇另一個用戶並打開消息窗口)?我已經使用socket.io在實時發送給在線用戶(和寫入消息MongoDB是異步)

演示應用程序的:https://abrmahmessenger.herokuapp.com/

Github上:https://github.com/abrmah/messenger

我會永遠如此感謝任何幫助。謝謝。

回答

0

你可以做的是返回一個承諾馬上,然後做一些處理,然後扔了。然後就可以了,並在該代碼塊,越過插座的消息。不知道這是不是他的意思,雖然這確實不會保持請求打開,但我不認爲這會減少服務器負載。畢竟服務器仍然需要進行數據庫查詢。儘管他沒有把req打開是正確的。

+0

非常感謝您的回覆。自從昨天以來,我已經設法實現了這一點,而且它似乎工作。我知道服務器上的總體負載不會降低,但我認爲這與它背後的邏輯有關。我只想了解何時使用套接字而不是HTTP請求。我能否使用套接字來告訴服務器推送數據?當我可以使用套接字io時,爲什麼需要HTTP?如果你能給出一個簡單的方法來獲得一個基本的認證信使系統,這將是非常有用的。謝謝 –

+0

他們都有用他們自己的方式。例如,API非常適合獲取初始數據集,並以結構化的方式提出問題/進行更新。套接字雖然對於特定的和服務器驅動的更新來說非常棒。如果你只是對客戶端發起偶然的後端調用,套接字可能會有很多開銷。對於類似實時通訊應用程序的東西,套接字是要走的路,否則客戶端將不得不繼續輪詢新消息。這裏有一個很好的快速閱讀:https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/amp/ – JustADude

相關問題