2011-12-24 12 views
6

私が理解しているように、http://socket.io/#how-to-useから、node.jsはサーバ上のsocket.ioファイルを自動的に提供します。Socket.ioがNode.jsサーバによってサービスされていない

npm install socket.ioとsocket.ioをインストールしました。サーバールートの1つ上のレベルの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

"サーバールートの1レベル上のnode_modulesに存在することがわかります。" 「サーバールート」とはどういう意味ですか?おそらく、Apacheの痕跡と混同しないでください。 NPMによってインストールされたモジュールは、NPMリポジトリに格納されています。これらのモジュールは、プロジェクトのメイン・ノード・スクリプトに関連する必要はありません。 '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 

あなたの場合のLinuxである場合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サポートウィンドウを今すぐ実行しますか? – 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 installを実行しますか?より良い解決策(imo)は、グローバルに 'npm install -g'をインストールしてから、' npm link'へのリンクを作成することです。そうすれば、1つの場所にインストールして1つの場所だけをアップグレードするだけで済みます。 –

-1

Azureでデプロイする場合(他のプラットフォームでは保証できません)、package.jsonファイルに開始スクリプトが含まれていることを確認してください。

例:

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

このヒントは有効ですが、実際にこの問題はありません。 Azureはノードアプリケーションのための特定の要件を持っていますが、それはsocket.ioとはまったく関係がありません。 – kubal5003

1

あなたが定期急行アプリから変換された場合:

一つ(私は誰もがなると信じて1:

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

2つのことを行うことが重要です右):

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

つ(この1つは欠場するのは非常に簡単です):代わりにapp.listen

の コールserver.listen私が文書化だ理由です、これをデバッグ、ほぼ2時間を過ごしました。