2012-03-08 52 views
2

我设置了将要使用socket.io实时应用。目前在php中有一些核心功能,它利用memcache和mysql后端。Socket.io和Ajax请求PHP页面

难道是有意义的socket.io服务器做一个Ajax请求(如果这甚至有可能)来处理这个PHP页面?有很多MySQL查询,我知道它可以在node.js中完成,但如果可能的话,我宁愿让这个部分在php中被抽象化。

所以,我的问题是,是一个正确的事是什么?从socket.io服务器中调用一个php页面然后返回到客户端?

谢谢!

+0

所以,你想要做的是什么...阿贾克斯 - > PHP文件 - > PHP文件连接到插座 - >返回的数据?似乎有点过于复杂?如果你使用Ajax,你不能(我不喜欢说不能,因为通常你可以:p)有一个持久的连接。你最好连接一个插座和一个插座。由于Ajax主要用作推 - >拉 – DdD 2012-03-08 04:37:51

+0

那么,不会这样。套接字服务器 - > Ajax请求 - >将结果发送到客户端 – dzm 2012-03-08 04:41:50

+0

但是,您将如何连接到它?我猜可能你可以对socket.io服务器做一个ajax请求,例如'.ajax({url:“http:// thehost:7777 /”,data:{yay:'test'},success:function(data ){alert(data);}});'但这似乎有点无意义?由于它仍然在进行推拉行为,所以您必须处理Ajax标头。我认为如果有的话,你可能会开发一些使用闪存来连接和维护连接(a.k.一个持久连接),它将数据发送到您的JavaScript事件 – DdD 2012-03-08 04:46:29

回答

4

我没有看到具有您的Node.js应用程序通过将一个RESTful API或一些PHP脚本,您可以张贴到或从你的socket.io的Node.js服务器与PHP应用程序通信的任何问题。有很多npm模块(例如request)可以使您的HTTP请求轻而易举。在您的节点应用中从PHP中检索数据后,您可以使用socket.io将emit()数据发送到前端的socket.io客户端。

+0

完美!谢谢。 – dzm 2012-03-08 04:57:49

0

没有什么不妥。您只需使用RESTful API访问MySQL数据,从而隔离数据库详细信息。

如果有一天你累了PHP的,你可以轻松地切换到Ruby,Python或无论该部件,甚至没有触及node.js中如果你的逻辑已经用PHP编写(你正在升级一个旧的应用程序),那么它就更有意义了,因为你可以重用已经过测试和调试的东西。很多人都在提倡这种系统间的分离。只要看看所有SOA(面向服务架构)的嗡嗡声。

我在哪里工作,我们在一个项目中使用这种非常架构(尽管在这种情况下,它的ASP.NET MVC网站调用Java EE应用程序),它为我们服务得很好。使用node.js的事件模型,它会更好,因为您不会阻止等待PHP。

不过,当然,也有一些缺点

  • 性能开销
  • 架构较为复杂
  • 现在你有两个语言,而不是只有一个工作(虽然JavaScript和PHP是经常一起使用我认为这不是真的在这种情况下是一个问题)

所以你需要问自己,如果你的问题真的需要这种解决方案。但在很多情况下,答案可能是肯定的。只是不要忘了美德保持简单和愚蠢(KISS原则)