【问题标题】:Socket.io and ajax request to php pageSocket.io 和 ajax 请求到 php 页面
【发布时间】:2012-03-25 15:46:06
【问题描述】:

我正在设置一个将使用 socket.io 的实时应用程序。目前php中有一些核心功能,利用memcache和mysql后端。

在 socket.io 服务器中向处理此问题的 php 页面发出 ajax 请求(如果可能的话)有意义吗?有很多 MySQL 查询,我知道可以在 node.js 中完成,但如果可能,我宁愿将这部分抽象在 php 中。

所以,我的问题是,这样做合适吗?从 socket.io 服务器中调用一个 php 页面然后返回给客户端?

谢谢!

【问题讨论】:

  • 那么,你要做的是... Ajax -> PHP File -> PHP File Connects to Socket -> 返回数据?似乎有点过于复杂?如果你使用 Ajax,你不能(我不喜欢说不能,因为通常你可以:p)有一个持久连接。您最好将套接字与套接字连接。由于 Ajax 主要用作 push->pull
  • 嗯,不会的。 Socket 服务器 -> Ajax 请求 -> 将结果发送到客户端
  • 但是你要如何连接它呢?我猜你可能会向socket.io服务器发出ajax请求,例如$.ajax({url: "http://thehost:7777/", data:{yay:'test'}, success:function(data) { alert(data); }});,但这似乎有点毫无意义?由于它仍在进行推拉行为,因此您必须处理 Ajax 标头。我认为如果有什么你可能会使用闪存开发一些东西来连接和维护连接(a.k.a 持久连接),它将数据发送到你的 javascript 事件
  • 不,我想也许我不清楚。因此,Socket io 服务器很好,它按预期将数据推送到客户端。但是,在服务器中,需要使用 MySQL 数据库和许多内部 PHP 功能。所以,问题是从 Socket 服务器中调用 PHP 文件是否合适 - 并将结果发送给客户端。
  • 不,我们中的一些程序员只是不懂英语(这是我的第一语言 jeeze...)如果你用伪代码写你的问题我会理解的哈哈:p跨度>

标签: php node.js socket.io


【解决方案1】:

这并没有错。您只是使用 RESTful API 来访问 MySQL 数据,从而隔离数据库细节。

如果有一天你厌倦了 PHP,你可以轻松地切换到 Ruby、Python 或其他任何东西,甚至无需接触 node.js。如果您的逻辑已经用 PHP 编写(您正在升级旧应用程序),那么它更有意义,因为您可以重用已经测试和调试过的内容。很多人都在提倡系统之间的这种分离。看看所有 SOA(面向服务的体系结构)的嗡嗡声。

在我工作的地方,我们正在一个项目中使用这种架构(尽管在本例中它是一个调用 Java EE 应用程序的 ASP.NET MVC 网站),它为我们提供了很好的服务。使用 node.js 的事件模型,它更好,因为你不会阻塞等待 PHP。

当然,也有一些缺点

  • 性能开销
  • 架构更复杂
  • 您现在使用两种语言而不是只使用一种语言(尽管 javascript 和 PHP 经常一起使用,我认为在这种情况下这不是问题)

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

【讨论】:

    【解决方案2】:

    我认为通过公开一个 RESTful API 或一些 PHP 脚本,让您的 node.js 应用程序与您的 PHP 应用程序通信没有任何问题,您可以从 socket.io node.js 服务器发布或获取这些脚本。有很多 npm 模块(如 request)可以让 HTTP 请求变得轻而易举。在您的 node 应用程序中从 PHP 检索数据后,您可以使用 socket.io 将emit() 数据发送到前端的 socket.io 客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2013-08-03
      • 2014-08-15
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多