2017-01-19 10 views
1

ハンドラを持たないsocket.io接続でメッセージを受信したことをどのように検出できますか?socket.io - 未処理のメッセージにアクセスするには?

例:

// client 
socket.emit('test', 'message'); 

// server 
io.on('connection', function (socket) { 
    console.log('connection received...'); 

    // logs all messages 
    socket.conn.on('message', function(data) { 
    console.log('this gets every message.'); 
    console.log('how do I get just the ones without explicit handlers?'); 
    }); 

    socket.on('other' function(data) { 
    console.log('expected message'); 
    }); 
} 

答えて

0

私はsocket.ioのようにそれを行うための方法を見つけるが、それは同じ仕事をやっているJSONにメッセージを変換するために、単純なJS関数を使用していませんでした。ここでは、この試すことができますして

function formatMessage(packetType, data) { 
    var message = {'packetType': packetType, 'data': data} 
    return JSON.stringify(message) 
} 

を:私はそうするでしょう

socket.on('message', function(packet){ 
    packet = JSON.parse(packet) 

    switch (packet.packetType) { 
     case 'init': 
    ... 

socket.send(formatMessage('init', {message})); 
0

、もちろんそれは抽象コードである...あなたが実装する必要がありますユーザーのIDを取得するためのすべてのリスナーとロジック

クライアント

var currentUser = { 
    id: ? // The id of current user 
}; 
var socketMessage = { 
    idFrom: currentUser.id, 
    idTo: ?, // Some user id value 
    message: 'Hello there' 
}; 

socket.emit('message', socketMessage); 

socket.on('emitedMessage' + currentUser.id, function(message) { 
     // TODO: handle message 
}); 

サーバー

io.on('connection', function (socket) { 
    // Handle emit messages 
    socket.on('message', function(socketMessage) { 
      // With this line you send the message to a specific user 
      socket.emit('emitedMessage-' + socketMessage.idTo, { 
       from: socketMessage.idFrom, 
       message: socketMessage.message 
      }); 
    }); 
}); 

さらに詳しい情報:http://socket.io/docs/

関連する問題