2016-08-25 2 views
0

내 작은 게임 서버가 로컬에서 실행될 때 제대로 작동하지만 내 리노 드에 올려 놓으면 오류가 발생합니다.Socket.io 코드가 로컬에서 작동하고 서버에서 실행되지 않습니다

전체 소스 : https://github.com/raimondi1337/null-terminus

와 관계있는 서버 코드 :

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

var clients = {}; 

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

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

관련 클라이언트 코드 :

<body> 
<script src="/socket.io/socket.io.js"></script> 
<h3 id="#player"></h3> 
<canvas id="canvas" width="750" height="500"></canvas> 
<script>var socket = io(); 

실행은, 내가 얻을 :

GET http://staging.dustinraimondi.com/socket.io/socket.io.js 
(index):8 Uncaught ReferenceError: io is not defined 

나는 경우, 변화시키다 socket.io CDN socket.io 최근에 스크립트 태그 내가 얻을 : socket.io-1.4.5.js:1 GET http://staging.dustinraimondi.com/socket.io/?EIO=3&transport=polling&t=LR3DCHp 404 (Not Found)

내가 Socket.IO only works locally IO에 따라 io.connect(23.239.8.165:3000);io();을 변경하면 여전히 정의하고는 'GET'실패합니다. 'io.connect();'를 사용하는 경우와 동일합니다. 서버의 IP를 지정하고 socket.io CDN을 사용하는 경우와 같습니다.

여기 웹 개념은 무엇입니까?

EDIT : Socket.io가 NPM을 통해 서버에 설치되어 있으면 서버가 실행 중입니다.

+0

Linode가 작동하지만, 포트 80의 요청을 매핑 않는 방법 방법을 모르고 (있는 당신의 웹 사이트가 될 것으로 보인다이 블록은이 하위 도메인 내 nginx를 구성에 추가되어야했다 익스프레스 앱이 실행되는 포트 3000에 액세스 할 수 있습니까? – robertklep

+0

Linode는 단지 vps입니다. CentOS7이 설치되어 있고 웹 서버로 nginx를 실행하고 있습니다. 내 nginx 구성에 문제가 있습니까? – Strelok

+0

일반적으로 꽤 간단한 설정이지만 그래, 될 수 있습니다. [socket.io와 proxys websocket 연결을 사용하는] 내 서버의 [여기 요점은] (https://gist.github.com/robertklep/f7221778f475832d6d236db7c180488e)입니다. – robertklep

답변

0

서버가 포트 3000에 대한 연결을 허용하지 않는 것 같습니다. 방화벽이이 포트를 통해 tcp 트래픽을 허용하는지 확인하십시오. io 스크립트를 호출하려면 http://staging.dustinraimondi.com:3000/soket.io/?EIO=3&transport=polling&t=LR3DCHp

Nginx가 포트 80에서 실행 중이므로 staging.dustinraimondi.com에게 요청하면 포트 80으로 요청을 보냅니다. nginx를 사용하지 않으면 nginx를 종료하고 포트 3000 대신 포트 80에서 수신 대기하도록 nodejs 응용 프로그램을 설정할 수 있습니다.

또 다른 옵션은 포트 3000으로 하위 도메인으로 요청을 전달하는 nginx (저는 nginx 전문가가 아닙니다)를 구성하는 것입니다. io.dustinraimondi.com과 같은 하위 도메인을 만들 수 있고 nodejs 프로젝트 서비스를 요청하면 nginx가 localport 3000에 요청을 전달할 수 있습니다.

0

문제는 내 코드가 아니지만 내 nginx se 서버 구성.

location /socket.io/ { 
    proxy_pass http://localhost:3000;  
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "Upgrade"; 
    proxy_set_header Host $host; 
} 

소스 : Socket.io with nginx

관련 문제