2017-08-11 51 views
0

我有一個很老的應用程序,但我們有我們的聊天功能的PHP API,它有兩個主要功能:獲取最後20條消息並將新消息插入數據庫。Socket.io與其餘的API

目前,我們正在使用AJAX更新數據,但我希望更快地更新數據。

是否有可能將socket.io連接到某些php API?我試圖在這個主題上搜索一些東西,但沒有好的例子。你可以給我一點點推動,我可以如何實現這樣的事情?

  • 用戶連接到的NodeJS其與消息返回JSON服務器
  • 當新用戶添加的信息,的NodeJS服務器呼叫API用於將新的消息發送到數據庫,並且它觸發「新的郵件」事件後的
  • 當nodejs服務器收聽事件「新消息」時,它從數據庫中提取數據,將其格式化爲json並觸發事件「數據更新」,其他用戶監聽事件「數據更新」 ,他們只是在json中得到一個新的消息列表

我的想法是,這可以像某些緩存層一樣工作,因爲數據庫中的數據只會被提取一次(通過觸發事件),然後作爲靜態json提供給用戶。

感謝您的任何幫助。

注意:我需要使用舊的php api,因爲在服務器上處理的聊天格式中有一些特殊功能。從頭開始重寫它是不可能的。當只有一些新數據時,我只想使用socket.io將數據從服務器推送到用戶。現在,即使沒有新消息,並且當然會創建不必要的數據庫連接等,他們仍會使用ajax調用新數據。

回答

0

WebSockets不應該比AJAX快,但是您所描述的是正確的實現這一點的方式。 NodeJS不僅可以發送HTTP請求到另一臺服務器(在你的情況下,PHP)。請查看此處的文檔:https://nodejs.org/api/http.html#http_http_request_options_callback
或使用此請求模塊:https://www.npmjs.com/package/request以獲得更簡單的代碼。

不要忘記,你正在做的事情需要你的restAPI在使用websocket將成功信息發送回客戶端之前用HTTP做出迴應。這意味着你的性能收益並不會那麼好。

+0

感謝您的回答!你爲什麼認爲它不會提高性能?我的想法是,每個客戶端都在下載靜態數據,並且只有當有新消息時,節點服務器纔會連接到php rest api,然後獲取它們,然後服務於所有客戶端。在這種情況下,如果有1000個或2000個客戶端,則不重要,因爲從數據庫中獲取數據只需要完成一次(當有新消息時)。但也許我錯過了一些東西,或者我的想法太過於理想化了...... –

+0

我只是不太瞭解你的概念。你現在描述的應該會產生更好的性能,因爲如果這只是從HTTP完成,那麼將需要1000或2000個唯一的http請求,並且所有這些都需要頭從服務器飛到客戶端,所以我相信你的想法很好。 – itsundefined