2016-11-01 12 views
5

接続時に特定のsocket.ioルームにログインするようにログインしようとしています。 ネットで見つけた例によると、私はクライアントからいくつかの部屋に参加できるようにいくつかのアクションを出すようです。接続時のソケットio roomへの接続

socket.on('connect', function() { 
    socket.emit('join', 'room1'); 
}); 

Server.js:

io.sockets.on('connection', function(socket) { 
    socket.on('join', function(room) { 
     socket.join(room); 
    }); 
}); 

そして、それが動作するはずですほとんどのチュートリアルに従ってなどの 何か。

私は何をするのthinkinだことにある:クライアント上で捕捉されない

socket.on('connect', function() { 
    socket.join('room1'); 
}); 

しかし、私は、サーバーから発するものは何でもMSGとして動作するようには思えません。どんなアイデアでも、何が間違っているのですか?一般的に可能ですか?

+0

は、あなたの中に参加http://stackoverflow.com/questions/19150220/creating-rooms-in-socket-io – sova

+0

をチェッククライアント側にないサーバー側 – Beginner

答えて

5

クライアント側には.join()メソッドはありません。部屋は純粋にサーバー側の構成であり、クライアントはそれらについて何も知らない。

最初のコードブロックは、操作を行うための望ましい方法です。ソケットに部屋に入るように頼むデザインのメッセージをサーバーに送信し、.join()がサーバー側で実行されます。

3

これは必要なものです。あなたは、クライアントを通してあなたが望むどんな部屋の名前でも自由に渡すことができます。サーバだけが部屋にソケットを割り当てることを処理できます。

サーバー:

io.sockets.on('connection', function(socket) { 
    socket.on('join', function(room) { 
    socket.join(room); 
    }); 
}); 

クライアント:これは容易に達成される

socket.emit('join', roomNum); 
1

。サーバーが理解できるクエリパラメータを渡すだけです。

次の例は完全にはテストされていませんが、そのアイデアは有効です。この例では、ルーム名はクライアントのwindow.location.hrefから決定されます。

クライアント

// Last segment of path is roomName 
var roomName = window.location.href.substr(window.location.href.lastIndexOf('/') + 1); 
var socket = io({ 
    query: { 
     roomName: roomName, 
    }, 
}); 

サーバー

var io = require('socket.io')(server); 
io.on('connection', function(socket) { 
    var query = socket.handshake.query; 
    var roomName = query.roomName; 
    if(!roomName) { 
     // Handle this as required 
    } 
    socket.join(roomName); 
});