2016-07-03 2 views
-1

node.js와 socket.io를 사용하여 채팅 응용 프로그램을 만들었지 만 작동하지만 localhost : 80에서 실행하지 않으려 고합니다. 온라인 상태 여야합니다. 내 웹 앱을 어떻게 포워드 할 수 있습니까? HTTP 포트를 portforward하려했지만 작동하지 않았습니다. "80 로컬 호스트"나는 연결하는 내 IP 주소를 사용할 수 있도록하려면socket.io 응용 프로그램을 포트 포워드하는 방법

var express = require("express"), 
    app = express(), 
    server = require("http").createServer(app), 
    io = require("socket.io").listen(server); 
server.listen(80); 

app.get("/", function(req, res){ 
    res.sendfile(__dirname + "/index.html"); 
}); 

그래서 그래, 내가 원하는 모든 대신 사용할 필요하다 : 여기 내 단절 측 코드입니다.

답변

0

가정용 라우터에서 정상적인 포트 전달은 정상적으로 작동합니다. socket.io 연결은 아래의 webSocket 연결이며 webSocket 연결은 HTTP 요청으로 수명을 시작하고 동일한 원본 소켓은 webSocket 프로토콜로 "업그레이드"됩니다. 따라서 클라이언트는 전체 프로세스를 시작하고 원래 연결을 설정하기 위해 서버에 HTTP 요청을합니다.

따라서 HTTP에서 작동하는 모든 포트 전달 구성은 socket.io 연결에서 작동해야합니다.

Socket.io 연결은 TCP 연결과 달리 장기간 지속되는 연결이기 때문에 오래 지속되는 연결을 허용하지 않는 인프라가 없는지 확인해야합니다. 프록시는 종종 오래 지속되는 webSocket 연결에 대해 특수하게 구성되어야합니다.), 그러나 이것이 포트 포워딩에 적용되어야합니다.


참고로 socket.io 연결에는 .listen()이 필요하지 않습니다. 이에

io = require("socket.io").listen(server); 

: 당신은 변경할 수 있습니다 경우

io = require("socket.io")(server); 

이이 포트 forwrarding로에 명확하지 않다 ...

당신은에 포트 포워딩을 수행하는 경우 가정용 라우터의 경우 특정 포트에서 들어오는 요청을 홈 네트워크의 특정 컴퓨터 및 포트로 보내야합니다. 그런 다음 인터넷에서 연결하려면 라우터의 공용 IP 주소와 포트 전달을 위해 구성한 포트에 연결합니다. 그런 다음 라우터는 포트 전달 규칙을 사용하여 원하는 포트의 수신 요청을 로컬 네트워크의 특정 서버로 리 라우팅합니다. 실수를 저 지르거나 앱을 적절히 보호하지 않으면 인터넷상의 사람들이 홈 네트워크의 내부를 공격 할 수있는 공격 지점을 열 수 있기 때문에 매우주의해야합니다.

일반적으로 이것은 장기 계획이 아니므로 호스팅 회사에 지불하여 앱을 실행하는 것이 좋습니다. 그런 다음 영구 IP 주소를 얻을 수 있으며 해당 IP 주소에 해당하는 도메인 이름을 설정할 수 있습니다.

+0

@AlexYates -이 답변에 대한 질문이 있으십니까? – jfriend00

관련 문제