从PHP向Node.js服务器发送数据

3
有没有办法从php向NodeJS服务器发送字符串或Json数据。
我的项目使用php(由Nginx服务器提供服务)。 而nodeJs服务器(8080端口,现在是JS)作为实时发布/订阅更新的后台运行。
当用户写一条消息时,数据库(Mysql)也会使用php进行更新。 并且更改必须发送到nodeJS(NowJS,8080端口)服务器以进行实时更新。
实时更新机制: 用户编写 -> php将其保存在mysql db中 -> php向nodeJS发送信息 -> nodeJS将更改发送给所有订阅者 -> 其他人可以实时注意到它。
所以我的问题是, 有没有办法从php向NodeJS服务器发送更改? 我是一个nodeJS新手。欢迎任何评论~ ^^;
4个回答

5

2
Node.js相当灵活,但如果您已经使用它实现了一个http服务器,则您的PHP可以使用file_get_contents来获取URL。 http://php.net/manual/en/function.file-get-contents.php。这仅适用于GET方法,您必须适当地编码您的json...
另外,您可能希望让您的服务器修改数据库,而不是将功能混合在PHP和node.js服务器中。这可能有助于将所有相关工作放在一个地方,可能更容易维护,调试,扩展等等。

注意:HttpRequest 是实验性的 pecl_http PECL 扩展的一部分。 - igorw
啊,我一直在最基本的方式下使用 file_get_contents。谢谢你提醒我 igorw! - david van brink

2
我不推荐你目前所使用的解决方案。
如果我要选择一种方法,我会使用 AMQP(npm install amqp)。https://github.com/ry/node-amqp 它还不完善,但在不同技术之间进行集成时,它可以相当不错地遵循消息队列模式。PHP有一个PECL扩展可用于使用AMQP:http://mx.php.net/manual/en/book.amqp.php 两者都可以通过使用它进行通信。虽然使用起来并不是那么简单,但如果正确使用,它可以带来可扩展的应用程序。

1
+1,您应该提到这还需要一个AMQP服务器,例如RabbitMQ。 - igorw

1

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

在node中创建第三个HTTP服务器(与您的NowJS服务器在同一进程中),该服务器侦听单独的端口(例如8081)。这个HTTP服务器是您的应用程序的Web服务。您的PHP应用程序向第三个Web服务器发出请求。第三个Web服务器解析这些请求并通过NowJS触发事件(因为使用node访问该范围很容易)。

它看起来像这样:

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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接