2011-12-24 4 views
6

내가 이해 한대로 http://socket.io/#how-to-use에서 node.js는 자동으로 서버의 socket.io 파일을 제공합니다.Node.js 서버에서 Socket.io가 제공되지 않습니다

npm install socket.io과 함께 socket.io를 설치했으며 서버 루트의 한 수준 위의 node_modules에 있음을 알 수 있습니다.

server.js :

var static = require('./plugins/node-static'); 
var socketIO = require('socket.io'); 
var clientFiles = new static.Server('./client'); 

var http = require('http'); 
httpServer = http.createServer(function (request, response) { 
    request.addListener('end', function() { 
      clientFiles.serve(request, response); 
     }); 
}).listen(8253); 

var webSocket = socketIO.listen(httpServer); 
webSocket.on('connection', function(client) { ..... 

index.html을 :

<html> 
<head> 
    <title>Chat</title> 
</head> 
<body> 
    <script src="/socket.io/socket.io.js"></script> 
    <script type="text/javascript" 
      src="http://code.jquery.com/jquery-1.5.2.js"></script> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      var webSocket = new io.Socket('localhost', { port: 8253 }); 
      webSocket.connect(); ....... 

서버가 잘 작동 시작하지만, index.html을을 열 때, 나는 다음과 같은 오류가 나타납니다

GET http://localhost:8253/socket.io/socket.io.js 404 (Not Found) 
Uncaught ReferenceError: io is not defined     :8253/:25 

아이디어?

+0

"서버 루트의 한 수준 위의 node_modules에 있습니다." "서버 루트"는 무엇을 의미합니까? 아마 아파치의 흔적과 혼동하지 않을까요? NPM에 의해 설치된 모듈은 NPM repos에 있으며, 프로젝트의 주 노드 스크립트와 관련이있는 것은 아닙니다. 성공적인'require ('socket.io')'는 설치가 정상이고 문제가 코드에 있음을 나타냅니다. – Kos

답변

6

socket.io

로 결박 한 후 서버에서 수신 시도

장소이

httpServer.listen(8253); 

var webSocket = socketIO.listen(httpServer); 
3

편집 : 사과, 귀하의 질문에 답변하지 않은 것을 작성했습니다.

var socket = io.connect(); //Hostname and port not required - Autodetected 
socket.on('connect', function(){ 
    $('#status').text('Connected'); 
}); 
socket.on('message', function(m){ 
$('#message').text(m); 
}); 
socket.on('disconnect', function(){ 
$('#status').text('Disconnected'); 
}); 

작업을 예 =>https://github.com/parj/node-websocket-demo/blob/master/public/main.js

NPM 정보 (필요한 경우) : 다음을 필요로하는 클라이언트 측에

당신은

cd <location of your server.js> 
npm install -g socket.ion #install globally 
npm link socket.io. #Create a symbolic link 

당신이 만약 리눅스에있는 경우 Windows에서 npm 링크를 할 수 없습니다.

cd <location of your server.js> 
npm install socket.io 

디렉토리 구조가 같아야합니다

server.js 
node_modules/ #Directory - same level as server.js 
    socket.io #socket.io underneath that 

node_modules는 server.js뿐만 아니라 서버 루트 위의 같은 디렉토리에 있어야합니다

+0

나는 그런 마법을 수행 할 필요가있는 자신을 기억할 수 없다. 소개 자습서에서도 그 사실을 암시하지 않는다. 'npm install socket.io'이 트릭을해야합니다. – Kos

+0

BTW "Windows를 사용하는 경우"npm에서 지금 Windows를 지원합니까? – Kos

+0

Windows에서 1/npm => cf stackoverflow article - http://stackoverflow.com/questions/7300132/how-to-use-npm-with-node-exe 2/Magic? :) 튜토리얼은 npm install에 대해 이야기합니다. 그들이 놓친 것은 같은 도서관에 여러 프로젝트가 있다면 어떨까요? 그런 다음 각 프로젝트에 대해 npm 설치를 실행합니까? 더 나은 해결책 (imo)은 전 세계적으로'npm install -g'을 설치 한 다음'npm link'에 대한 링크를 만듭니다. 그렇게하면 한 곳에서만 설치하고 한 곳에서만 업그레이드하면됩니다. –

-1

Azure에서 배포하는 경우 (다른 플랫폼은 보증 할 수 없음) package.json 파일에 시작 스크립트가 포함되어 있는지 확인하십시오.

예 :

"scripts" : { "start": "node index.js" } 
+0

이 힌트는 유효하지만이 문제는 아닙니다. Azure는 노드 애플리케이션에 대한 특정 요구 사항을 가지고 있지만 socket.io와는 아무 관련이 없습니다. – kubal5003

1

정기적 명시 응용 프로그램으로 변환됩니다

하나 (내가 믿는 사람이 모든 사람이 가져옵니다

const express = require('express') 
const app = express() 
app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}) 

두 가지 일을하는 것이 중요하다 오른쪽) :

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

두 (이 사람은 그리워하는 것은 매우 쉽습니다) : 전화 server.listen 대신

app.listen의 내가 문서화하고있어 그 이유는,이 디버깅을 거의 2 시간을 보냈다.

관련 문제