2011-01-09 4 views
31

나는 node.js ... 내 머리를 움켜 잡으려고 노력 중입니다 ...Apache PHP와 함께 node.js가 실행 중입니까?

현재 내 요구 사항을 충족시키기 때문에 램프 설정에 매우 만족합니다. 내 PHP 앱에 실시간 기능을 추가하고 싶습니다. 현재 내 사이트에 로그인 한 모든 사용자와 가능한 채팅 기능을 보여주는 것.

PHP 백엔드를 바꾸고 싶지 않지만 확장 가능한 실시간 솔루션이 필요합니다.

1. 응용 프로그램 서버 측 스크립트 전체를 다시 빌드하지 않고도 node.js를 믹스에 넣을 수 있습니까?

2. node.js가 내 '채팅'및 '현재 로그인 한'기능을 제공하는 최선의 방법은 무엇입니까?

의견을 듣기 좋습니다!

답변

22

측면 node.js를 따라 Socket.io를 사용하는 것이 좋습니다. lib를 설치하고 http://socket.io/에서 다운로드하십시오. Apache 서버 측에서 문제없이 실행할 수 있습니다. ,

var http = require('http') 
    , url = require('url') 
    , fs = require('fs') 
    , io = require('../')//path to your socket.io lib 
    , sys = require(process.binding('natives').util ? 'util' : 'sys') 
    , server; 

server = http.createServer(function(req, res){ 
    var path = url.parse(req.url).pathname; 
}), 

server.listen(8084);//This could be almost any port number 

둘째 사용하여 명령 줄에서 서버를 실행합니다 :

먼저 노드 서버를 만들 셋째

node /path/to/your/server.js 

, 클라이언트 측 JS를 사용하여 소켓에 연결합니다

var socket = new io.Socket(null, {port: 8084, rememberTransport: false}); 
socket.connect(); 

socket.io lib 클라이언트 측을 포함시켜야합니다.

하여 사용하여 노드 서버에 클라이언트 측에서 데이터를 전송합니다

socket.send({data:data}); 

귀하의 server.js는 기능을 가지고 있어야 처리 요청 : 데이터를 전송하는 두 가지 방법이 있습니다

io.on('connection', function(client){ 
//action when client connets 

client.on('message', function(message){ 
    //action when client sends msg 
    }); 

    client.on('disconnect', function(){ 
    //action when client disconnects 
    }); 
}); 

클라이언트 서버 :

client.send({ data: data});//sends it back to the client making the request 

client.broadcast({ data: data});//sends it too every client connected to the server 
+3

안녕하세요,이 위대한 답변에 감사드립니다. 나는 여전히 아파치 부분에 연결하는 것에 대해 약간 혼란스러워한다. 아파치 부분을 더 명확하게하기 위해 답에 몇 가지 코멘트/코드를 추가 하시겠습니까? –

+1

동일한 원산지 정책은 어떻게됩니까? 소켓 io를 사용하여 다른 포트로 전화를 걸 수는 없습니까? – Zaptree

+0

감사합니다. 시작하기에 많은 도움이되었습니다. –

2

W. 나는 채팅뿐만 아니라 목록에 기록 된이 아약스를 통해 일하는 것이 의심.

채팅 부분은 Node.js에서 프로그래밍하기가 매우 쉬우 며 노드에 mysql modules 중 하나를 사용하여 기존 데이터베이스에 연결하고 로그인 정보를 쿼리 한 다음 Node.js를 통해 모든 실제 채팅을 수행합니다. Browser/Node.js의 통신을 정말 사소한 것으로 만들었 기 때문에 Socket.io을 체크 아웃 할 것을 권장합니다. 이것은 실제 채팅 로직에 집중할 수있게합니다.

또한 영감을 얻기 위해 Node.js의 "공식"chat demo을 살펴볼 수 있습니다.

현재 온라인 부분까지는 "마지막 X 분 동안 활성 상태 인 5 명의 사용자"의 행을 따라 무언가를 표시하는 것으로 구현하기가 쉽지 않습니다.

물론 채팅 서버에 쿼리하고 홈페이지의 사용자 목록을 표시하는 Ajax를 쉽게 추가 할 수 있습니다.

또는 모든 방문자에 대해 완전히 미친 듯이 Socket.io 연결을 설정하고 이러한 방식으로 모니터링하십시오.하지만이 방법이 효과적인지 여부는 의문입니다.

+0

포트 80이 이미 Apache에서 사용되고 있거나 다른 IP에 바인드되어 있으므로 다른 포트에서 node.js 서버를 강제 실행하지 않겠습니까? 채팅 서버와 현재 웹 앱과 통신하고 싶다면 그는 크로스 도메인 문제를 겪게됩니다. 나는 틀릴 수도 있지만 이것이 본질적으로 그의 질문이라고 믿습니다. –

+0

에 따라 달라 지므로 URL을 변경하지 않고도 전달할 수 있습니다. http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/ –

+2

흥미로운 찾기. 이 게시물에 대한 의견 중 하나는 그 반대를 제안합니다. 나는. node.js가 다른 방법 대신 Apache로 프록 싱합니다. Apache를 node.js의 프록시로 사용하면 Apache는 모든 요청마다 새 프로세스를 생성하여 node.js로 전달합니다. –

0

.

Node.js는 원하는 다른 웹 서버 (아파치)와 함께 쉽게 실행할 수 있습니다. @KitCarrau 예에서 그는 노드가 8084 포트에서 실행되도록합니다. 즉, 실행중인 곳과 수신 대기중인 곳, 80 또는 443 등이 아닙니다 (보통 어쨌든 아파치에 의해 수행됩니다). 하지만 여전히 동일한 포트를 사용하여 http/https 서비스를 제공 할 수 있습니다. (제 경우에는 서비스가 작동하는 몇 가지 conf 및 일반 정보가 나와 있습니다).

콘솔에서 시작하는 것이 가장 좋은 방법은 아닙니다 (원격으로 콘솔을 닫을 때 노드가 멈 춥니 다). 내가 실시간으로 로그 추적 Running node as service

쉬운에서 보라는 권유를 (을 console.log ("안녕하세요")와 로그, 응용 프로그램에서)로 :

tail -f /var/.../SocketServer.log 

샘플 스크립트 (노드 - server.conf) :

author ....  
description "node.js server"  
# used to be: start on startup 
# until we found some mounts weren't ready yet while booting: 

start on started mountall 
stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

# Max open files are @ 1024 by default. Bit few. 
limit nofile 32768 32768 

script 
    # Not sure why $HOME is needed, but we found that it is: 
    export HOME="/root" 

    exec node /var/.../SocketServer.js >> /var/www/node/.../SocketServer.log 2>&1 
end script 

post-start script 
    # Optionally put a script here that will notifiy you node has (re)started 
    # /root/bin/hoptoad.sh "node.js has started!" 
    echo "\n*********\nServer started\n$(date)\n*********" >> /var/.../SocketServer.log 

end script