2011-04-03 115 views
3

有什么方法可以将字符串或Json数据从php发送到nodeJS服务器。从php发送数据到nodejs服务器

我的项目使用php(Nginx服务器提供它)。 nodeJs服务器(8080端口,NowJS)作为实时Pub/Sub更新的背景运行。

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

实时更新机制: 用户写道 - > PHP将它保存在MySQL数据库 - > PHP发送信息到的NodeJS - > 发送的NodeJS改变所有用户 - >其他人可以实时看到它。

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

回答

2

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

作为一个方面说明,你可能想让你的服务器修改数据库,而不是混合功能一半在PHP和一半在node.js服务器上。这可能有助于将所有相关工作保留在一个地方,可能更易于维护,调试和扩展等。

+0

注意:HttpRequest是实验性pecl_http PECL扩展的一部分。 – igorw 2011-04-03 16:17:01

+0

ack,你是对的!回头看看我使用了哪一个,然后... – 2011-04-03 16:29:06

+0

啊,我以最基本的方式使用了file_get_contents。感谢您在这个igorw上给我打电话! – 2011-04-03 16:36:51

1

由于NowJS使用Socket.io,和Socket.io提供一个普通HTTP传输称为htmlfile(相对于WebSockets的),这可能是可以使HTTP POST请求通过使用curl或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。

2

我不会向你推荐迄今使用的解决方案。

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

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

两者都可以通过使用它来相互通信。使用起来并不简单,但它运行得非常好,如果做得对,可以导致可扩展的应用程序。

+0

+1,你应该提到这也需要一个AMQP服务器,比如RabbitMQ。 – igorw 2011-04-03 16:58:38