2010-07-03 4 views
2

나는 node.js의 연결 기능을 사용하여 PHP 스크립트를 오랫동안 폴링하고 node.js에서 php로 연결되는 thoery (어쩌면 코드 샘플)를 알고 있는지 궁금합니다. ? 나는 새 클라이언트가 필요하다고 생각하고 PHP 페이지에 대한 요청을 추가 한 다음 응답 이벤트 리스너를 추가하여 반환 된 데이터를 가져 와서 서버 함수로 다시 던지는 이벤트 함수를 시작합니다.node.js에서 PHP 가져 오기

그러나 저는 멍청한 놈입니다. API 문서가 읽기 쉽지 않기 때문에 초기 지침이 필요합니다. 영어는 너무 어색하고 어두운 배경에 흰색 글꼴 ... 좋지 않습니다.

감사합니다,

+1

PHP 스크립트에서 데이터를 얻기 위해 노드를 사용하는 것은 서버 자원을 사용하지 않도록하는 노드의 목적과 모순됩니다 PHP와 Python/Ruby와 같은 다른 웹 서버 언어는 일반적으로 그렇게합니다. – selfawaresoup

+2

그럴 수도 있지만 아파치와 같은 서비스 메커니즘을 사용하는 것보다 PHP를 더 빠르고 효율적으로 제공 할 수는 없습니까? 분명히 가장 이상적인 상황은 node.js가 직접 요청에 응답하는 것이지만, 아파치 자신의 단점을 극복하는 데 사용할 수없는 이유는 없습니다 ... –

답변

3
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/'); 

이 작동하는 것 같았다. 다른 튜토리얼을 혼합하여 만든 것

+0

이 솔루션을 발견 한 이후로이 코드를 더 발전 시켰습니까? 새로운 팁을 발견하는 것이 좋을 것입니다. –

2

이 주제에 대한 연구를하고 있었지만, 똑같은 일을하고 싶어하는 사람에게는 답을하고 싶었습니다.

OP에 대한 의견은 이러한 종류의 것이 자원의 효율적인 사용인지 또는 노드 이벤트 기반 처리 능력의 낭비인지에 관해 좋은 지적을했습니다. 아파치/PHP 서버로 요청을 전달하는 것은 비효율적이라고 말할 수 있습니다. 왜냐하면 반복적 인 AJAX 요청을 아파치 서버로 보내는 것과 같은 일을하기 때문입니다. 유일한 차이점은 요청자에게 요청을 보내는 man-in-the-middle가 있다는 것입니다.

아파치는 여전히 클라이언트와 동일한 요청을 처리하고 있으며 클라이언트가 아닌 Node.js 서버에 서비스를 제공하고 있습니다. 이것은 약간의 부하를 클라이언트에서 빼고 서버에 배치하는 것 외에는 효율성을 향상시키지 않습니다.

@Paul이 언급했듯이이를 수행하는 올바른 방법은 Apache를 우회 할 수있는 일종의 PHP 프로세서를 사용하는 것입니다. FastCGIPHP-FPM을 사용하여이 작업을 수행하는 멋진 방법이 있습니다. 꽤 높은 수준이므로 직접 Node.js에 통합하는 데 어려움이있을 수 있습니다.

밝은면에는 이미 노드 모듈 (node-php) 만 설치되어 있습니다. 꽤 젊습니다 ("오메가 - 알파 - 베타 - 개념 증명"). 그러나 당신이하려는 일을 처리 할 수 ​​있습니다. 그것이 좋은 출발점이 될 수 없다면, 당신은 자신의 추가를 만들기 위해 분기 할 수 있습니다

관련 문제