2016-09-22 14 views
0

ちょっと私はソケットとノードを使い慣れていないし、socket.ioを使ってチャットをして遊んでいる。Socket.ioとの統合ノード

はここに私のindex.jsファイルされる:

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

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

io.on('connection', function(socket) { 
    console.log('A user has connected'); 
    socket.on('disconnect', function() { 
     console.log("A user has disconnected"); 
    }) 
}) 

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

**ここでは私のindex.htmlです:**

<html> 
<head> 
    <title> Chat </title> 
    <script src="https://cdn.socket.io/socket.io-1.0.0.js"></script> 
    <script> 
     var socket = io(); 
    </script> 
</head> 
<body> 
    <ul id="messages"></ul> 
    <form action=""> 
     <input id="m" autocomplete="off"/> <button> Send </button> 
    </form> 
</body> 

私が言って参照エラーを取得しておきますそのioは定義されていません。私はcdnと私のサーバーのURLとしてソケットをリンクしようとしました。

+1

サーバでもsocket.ioが必要です。 socket-ioをインストールし、 '' 'var io = require( 'socket.io')(app);' 'を追加してみてください。 –

+0

@ HimaniAgrawalありがとう、これはうまくいった! – rxa

答えて

1

あなたは、サーバー側でsocket.ioをロードして初期化する必要があります。

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

// add this line 
var io = require('socket.io')(http); 

これはsocket.ioモジュールをロードし、登録し、それにフックすることができますので、それはあなたのWebサーバーとだと、その後を宣言および譲受人io変数。

P.S.あなたのクライアントはsocket.io 1.0.0にリンクしています。これはかなり古いバージョンです。あなたはおそらくあなたのsocket.ioのサーバー・ハンドルはこれにあなたのクライアントスクリプトタグを変更することにより、socket.ioクライアントにサービスを提供させてください:

<script src="/socket.io/socket.io.js"></script> 

これは、自動的にクライアントをあなたのサーバー上にあるsocket.ioの一致するバージョンを提供します(したがって、彼らは常に同じバージョンと同期します)。これは、require('socket.io')(app)が実行するものの1つで、/socket.io/socket.io.jsのルートハンドラを登録するために機能します。

+0

var io = require( 'socket.io')(http);私のためのトリックをした、ありがとう!だから、基本的に私はそれをクライアント側とサーバ側の両方で参照する必要がありますか? – rxa

+0

@rxa - クライアント側とサーバー側の両方でsocket.ioを初期化する必要があります。 – jfriend00

関連する問題