web-dev-qa-db-ja.com

Node js-Socket.io-clientはsocket.ioサーバーに接続していません

次のコードを使用してsocket.io-clientに接続しようとしています。

サーバ:

// Load requirements
var http = require('http'),
    io = require('socket.io');

// Create server & socket
var server = http.createServer(function(req, res){

    // Send HTML headers and message
    res.writeHead(404, {'Content-Type': 'text/html'});
    res.end('<h1>Aw, snap! 404</h1>');
});
server.listen(8080);
io = io.listen(server);

// Add a connect listener
io.sockets.on('connection', function(socket) {

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() {
        console.log('Client disconnected.');
    });
});

クライアント:

console.log('1');

// Connect to server
var io = require('socket.io-client')
var socket = io.connect('localhost:8080', {reconnect: true});

console.log('2');

// Add a connect listener
socket.on('connect', function(socket) {
    console.log('Connected!');
});

console.log('3');

接続済みコンソールログまたはクライアント接続済みコンソールログを取得できず、その理由がわかりません!コードサンプルは、投稿された別の質問から取得されます: Link そして、私は問題の解決策が見つかりません...

13
exilonX

サーバー上でsocket.ioバージョンが1.0よりも大きい場合、これを変更します。

// Add a connect listener
io.sockets.on('connection', function(socket) {

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() {
        console.log('Client disconnected.');
    });
});

これに:

// Add a connect listener
io.on('connection', function(socket) {

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() {
        console.log('Client disconnected.');
    });
});

Socket.ioのドキュメントを参照してください ここを参照


既に接続されているソケットでのみこのイベントをリッスンする必要はありません。新しく作成されたソケットも含め、任意のソケットでこのイベントをリッスンする必要があります。


また、インターネット上のランダムな場所でsocket.ioコードを読み取るときは十分に注意してください。 v0.9からv1.0に大幅に変更されたものもあります(これがそれらの1つであるかどうかはわかりません)。通常は、常に最新バージョンを表すため、常に最初にsocket.ioドキュメントサイトから開始する必要があります。次に、他のインターネット参照を見る場合は、2014年半ば以降の記事のみを使用するようにしてください。記事のヴィンテージがわからない場合は、最新の記事からの裏付けがない限り、その記事に頼らないことをお勧めします。

12
jfriend00

また、プロトコルにパスを追加する必要があります。

変化する

var socket = io.connect('localhost:8080', {reconnect: true});

var socket = io.connect('http://localhost:8080', {reconnect: true});
13
jinson