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