我正在使用node.js的連接能力來連續長時間輪詢一個php腳本,我想知道是否有人知道在node.js中鏈接到php的thoery(可能甚至是代碼示例) ?我想我需要一個新的客戶端,我添加一個PHP頁面的請求,然後添加一個響應事件偵聽器,然後觸發一個事件函數,捕獲返回的數據並將其返回到服務器功能。從node.js獲取PHP
但是,我是一個noob,需要一些初步的指導,因爲他們的api文檔不是最容易閱讀的;英文太羅嗦了,它是黑色背景上的白色字體......不太好。
感謝,
我正在使用node.js的連接能力來連續長時間輪詢一個php腳本,我想知道是否有人知道在node.js中鏈接到php的thoery(可能甚至是代碼示例) ?我想我需要一個新的客戶端,我添加一個PHP頁面的請求,然後添加一個響應事件偵聽器,然後觸發一個事件函數,捕獲返回的數據並將其返回到服務器功能。從node.js獲取PHP
但是,我是一個noob,需要一些初步的指導,因爲他們的api文檔不是最容易閱讀的;英文太羅嗦了,它是黑色背景上的白色字體......不太好。
感謝,
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/');
這似乎工作。從其他教程的混合使用
自從您找到此解決方案後,您是否進一步發展了此代碼?很高興看到您可能提出的任何新提示。 – 2011-02-23 20:04:14
剛剛對此主題進行了一些研究,並希望爲任何可能希望執行相同操作的人提供答案。
對OP的評論很好的說明了這種事情是否會對資源有效利用,或者浪費節點基於事件的處理能力。我認爲將請求傳遞給Apache/PHP服務器會效率低下,因爲你本質上與發送給Apache服務器的循環AJAX請求做同樣的事情。唯一的區別是你現在有一箇中間人發送請求。
Apache仍然像往常一樣提供請求,它只是將它們提供給Node.js服務器而不是客戶端。這不會產生任何效率,除了從客戶端上取下一些負載並將其放置在服務器上。
正如@Paul提到的那樣,正確的做法是使用某種PHP處理器,它可以繞過Apache。有一些使用FastCGI和PHP-FPM來完成這項工作的奇特方法 - 它們非常高,所以您可能在自己將它們集成到Node.js時遇到了一些麻煩。
在光明的一面,有一個節點模塊已經被構建來做到這一點:node-php。它非常年輕(「omega-alpha-super-beta-proof-of-concept」),但可能能夠處理你想要做的事情。如果它不能,至少這是一個很好的起點,你可以分叉以做出自己的增加
使用節點從PHP腳本中獲取數據與節點的目的相矛盾,這是爲了避免使用服務器資源像PHP和其他Web服務器語言(如Python/Ruby)通常會這樣做。 – selfawaresoup 2010-07-29 13:44:35
這可能是這樣,但是與使用諸如Apache這樣的服務機制相比,它不會更快更有效地服務PHP嗎?很顯然,最理想的情況是node.js直接回答請求,但沒有理由不能用它來克服apache自己的缺點...... – 2011-02-23 20:03:16