2017-08-11 57 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