繁体   English   中英

从node.js获取PHP

[英]Getting PHP from node.js

我正在使用node.js的连接功能来连续长时间轮询php脚本,我想知道是否有人知道在node.js中链接到php的背后想法(甚至是代码示例)? 我以为我需要一个新的客户端,我向php页添加了一个请求,然后添加了一个响应事件侦听器,然后触发了一个事件函数,该函数捕获返回的数据并将其扔回到服务器函数中。

但是,我是一个菜鸟,需要一些初步指导,因为他们的api文档不是最容易阅读的; 英文太罗word了,在深色背景上是白色字体...不好。

谢谢,

var sys = require('sys'),
   http = require('http'),
   url = require("url"),
   path = require("path"),
   events = require("events");

var twitter_client = http.createClient(80, "192.168.23.128");

var tweet_emitter = new events.EventEmitter();

function get_tweets() {
var request = twitter_client.request("GET", "/?url=ajax/session", {"host": "192.168.23.128"});

request.addListener("response", function(response) {
    var body = "";
    response.addListener("data", function(data) {
        body += data;
    });

    response.addListener("end", function() {
        sys.puts(body);
        var tweets = JSON.parse(body);
        if(tweets.length > 0) {
            tweet_emitter.emit("tweets", tweets);
        }
    });
});

request.end();
}

setInterval(get_tweets, 5000);


http.createServer(function (req, res) {
sys.puts("accessed Server");

res.writeHead(200, {'Content-Type': 'text/plain', "Access-Control-Allow-Origin": "*"});

var t = JSON.stringify({id:"test"});

var listener = tweet_emitter.addListener("tweets", function(tweets) {
    res.write(tweets);
});

 res.write(t);
  res.end();
}).listen(8124);
sys.puts('Server running at http://127.0.0.1:8124/'); 

这似乎有效。 取自其他教程的混合

只是在对此主题进行一些研究,并想为任何可能希望做同样事情的人提供答案。

关于OP的评论很好地指出了这种事情是否会有效利用资源,或者浪费节点基于事件的处理能力。 我要说的是,将请求传递到Apache / PHP服务器上效率很低,因为您执行的操作基本上与将重复的AJAX请求发送到Apache服务器相同。 唯一的区别是您现在有一个中间人发送请求。

Apache仍然像以前一样提供请求,它只是将请求提供给Node.js服务器而不是客户端。 除了减轻客户端的负载并将其放置在服务器上之外,这没有任何效率。

如@Paul所述,正确的方法是使用某种PHP处理器,该处理器将允许您绕过Apache。 有一些使用FastCGIPHP-FPM完成此操作的奇特方法-它们相当高级,因此您可能很难自行将它们集成到Node.js中。

从好的方面来说,已经有一个节点模块可以做到这一点: node-php 它还很年轻(“ Omega-alpha-super-beta-proof-of-concept”概念),但也许能够处理您要尝试执行的操作。 如果不能,至少这是一个很好的起点,您可以分叉进行自己的补充

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM