将数据从php发送到nodejs服务器

时间:2011-04-03 16:04:34

标签: php javascript node.js

有没有办法从php向nodeJS服务器发送字符串或Json数据。

我的项目使用php(Nginx服务器提供服务)。 nodeJs服务器(8080端口,NowJS)作为实时发布/订阅更新的后台运行。

当用户编写消息时,数据库(Mysql)也会使用php进行更新。 并且更改必须发送到nodeJS(NowJS,8080端口)服务器以进行实时更新。

实时更新机制: 用户写道 - > php将其保存在mysql db中 - > php发送信息给nodeJS - > nodeJS发送更改所有订阅者 - >其他人可以实时注意到它。

所以我的问题是, 有没有办法将更改从php发送到NodeJS服务器? 我是nodeJS新手。任何评论欢迎〜^^;

4 个答案:

答案 0 :(得分:5)

你有什么理由不能使用卷曲吗?

$ch = curl_init('http://yournodehost/path');
curl_exec($ch);

根据您的要求,您可以设置适当的卷曲选项。

答案 1 :(得分:2)

Node.js非常灵活,但是如果你用它实现了一个http服务器,那么你的PHP可以使用file_get_contents来获取一个URL。 http://php.net/manual/en/function.file-get-contents.php。这只适用于GET方法,你必须适当地对你的json进行编码......

作为旁注,您可能希望让服务器修改数据库,而不是将PHP中的一半功能和node.js服务器中的一半混合使用。这可能有助于将所有相关工作保存在一个地方,可能更容易维护,调试,扩展等等。

答案 2 :(得分:2)

我不推荐你到目前为止使用的解决方案。

如果我走一条路,我会使用AMQP(npm install amqp)。 https://github.com/ry/node-amqp

它并不完整,但它适用于不同技术之间的集成,因为它遵循消息队列模式。 PHP具有使用AMQP的PECL扩展:http://mx.php.net/manual/en/book.amqp.php

两者都可以通过使用它们相互通信。它使用起来并不简单,但它工作得很好,如果做得好,可以导致可扩展的应用程序。

答案 3 :(得分:1)

由于NowJS使用Socket.io,并且Socket.io提供了一个名为htmlfile的普通HTTP传输(而不是WebSockets),因此可以使用curl向服务器发出HTTP POST请求或者pecl_http或file_get_contents。但是,NowJS有自己的数据格式约定。我没有在PHP中重新实现这种格式,而是提出了另一种方法:

在节点(与NowJS服务器处于同一进程中)中创建第三个HTTP服务器,该服务器侦听单独的端口,例如8081.此HTTP服务器是应用程序的Web服务。您的PHP应用程序向第三个Web服务器发出请求。第三个Web服务器解析这些请求并通过NowJS触发事件(因为访问该范围对于节点来说是微不足道的。)

它看起来像这样:

var http = require('http');

var nowServer = http.createServer();
nowServer.listen(8080, "127.0.0.1");

var everyone = require("now").initialize(nowServer);

var apiServer = http.createServer(function (req, res) {
  switch (req.url) {
    case '/do_something':
      everyone.now.doSomething();
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end();
    break;

    default:
      res.writeHead(404, {'Content-Type': 'text/plain'});
      res.end('No such service\n');
    break;
  }
});
apiServer.listen(8081, "127.0.0.1");

双重警告:这是完全未经测试的,我从未使用过NowJS。