2011-09-12 5 views
10

이 질문이 매우 어리석은 질문이 아니기를 바랍니다.하지만 실시간 웹 응용 프로그램을 만들기 위해 내 웹 사이트에 socket.io 서버를 구현하는 방법을 배우고 있습니다. 내 문제는 내가 아파치 제공 환경에서 응용 프로그램을 구현하는 방법을 알아낼 수 없다는 것입니다. 현재 node server.js을 실행하여 socket.io 서버를 시작하면 http://localhost:XXXX을 방문하여 액세스해야합니다. XXXX은 자연스럽게 연결하는 포트입니다. 내 웹 사이트가 이와 같이 대체 포트에서 강제로 표시되는 것을 원하지 않지만 Apache가 포트 80에서 수신 중이므로 서버를 포트 80에 연결할 수 없습니다.아파치를 통해 socket.io 서버에 액세스 페이지

분명히 자연스러운 해결책은 아파치 서비스를 중단 한 다음 충돌을 피하기 위해 포트 80에서 서버 노드를 만드는 것이지만 아파치가 제공하는 모든 기능을 희생하고 싶지는 않습니다. 기본적으로 포트 80의 Apache를 통해 내 웹 사이트를 계속 제공하고 포트 3000의 socket.io를 통해 실시간 응용 프로그램의 특정 측면을 통합하려고합니다.

원하지 않는 일을 피할 수있는 방법이 있습니까? 그 것들은 1) 사용자가 URL에 :3000으로 내 사이트에 액세스하게하는 것, 2) 아파치를 사용하지 않는 것, 3) iframe을 사용하는 것.

미리 감사드립니다.

답변

3

일반적으로 mod_proxy를 사용하여 Node.js를 숨길 수 있습니다. 약간의 검색 결과가 다음과 같이 나타났습니다. https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md (이전 링크가 없어 졌음, 새 것입니다.)

그러나 Socket.io는 조금 까다롭기 때문에 특별히 문제가있을 수 있습니다.

티켓이 약간 오래된 것만 큼 가치가 있습니다. 문제가 있으면 놀라지 마십시오. 그 다음에는 노드 Node.js가 80 번 포트를 묶어서 https://github.com/nodejitsu/node-http-proxy (아직도 개발 단계에 있음)으로 Apache의 역방향 프록시 역할을하게됩니다.

최적의 솔루션은 자체 서버에서 실행되며 소켓 트래픽은 socket.example.com 또는 그와 비슷한 것입니다.

+0

두 번째로 나열된 방법은 Apache 지시문을 상당히 재구성해야하지만 지금까지 구현 한 방법입니다. 구현이 완료되었으므로 전체 프로세스가 직관적이지 않고 두 서버를 "동일한"포트에 바인딩하는 것 외에도 실제로 달성해야 할 일에 더 가까이 다가 가지 않았다고 생각합니다. mod_proxy에 대해 더 자세히 살펴보고 더 신중한 해결책이 아닌지 알아 봅니다. 반복적 인 문제는 select 페이지에서 socket.io ..와 함께 전체 문서를 제공 할 필요가 없다는 것입니다. "포팅 된 div"입니다. –

+0

언급하신 첫 번째 링크는 죽었습니다. –

+0

새 링크로 업데이트 –

2

Socket.io에는 여러 전송 메커니즘이 있습니다. 일부는 리버스 프록시로 아파치를 실행하면 작동하지 않지만 일부는 작동하지 않습니다. 작동하지 않는 전송은 websocket 및 flash이지만 xhr-polling 및 jsonp-polling이 작동해야합니다. 나는 정상 name based virtual hosts and reverse proxy setup을 사용하고 내 아파치에

var io = require("socket.io").listen(server); 
io.set("transports", ["xhr-polling", "jsonp-polling"]); 

을하고 이들이 socket.io를 전송하여 작동하는 것 같군 :

여기 socket.io의 전송 구성 옵션을 설정하는 방법에 대한 예입니다.