【问题标题】:Sending data from php to nodejs server将数据从php发送到nodejs服务器
【发布时间】:2011-07-28 16:38:15
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php javascript node.js


    【解决方案1】:

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

    在节点中创建第三个 HTTP 服务器(与您的 NowJS 服务器在同一进程中),它侦听一个单独的端口,例如 8081。这个 HTTP 服务器是您的应用程序的 Web 服务。您的 PHP 应用程序向第三个 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

      两者都可以通过使用它来相互通信。它使用起来并不简单,但它运行良好,如果操作正确,可以开发出可扩展的应用程序。

      【讨论】:

      • +1,你应该提到这还需要一个AMQP服务器,比如RabbitMQ。
      【解决方案3】:

      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 扩展的一部分。
      • 啊,我以最基本的方式使用 file_get_contents。感谢您在那个 igorw 上给我打电话!
      【解决方案4】:

      有什么理由不能使用 curl?

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-17
        • 2012-07-19
        • 2021-03-29
        • 2022-01-12
        • 2017-12-15
        • 2013-12-13
        • 2013-12-27
        • 1970-01-01
        相关资源
        最近更新 更多