2017-01-20 4 views
0

現在、ノードで開始されたスーパーシンプルなWebSocketセットアップで「ブロードキャスト」の問題が適切に機能していないようです。これはWebSocketで初めての作業なので、かなりわかりにくいかもしれませんが、しばらくオンラインを見てから解決策を見つけることができませんでした。ノードのWebソケットブロードキャストが動作しない

基本的には、現在接続されているすべてのクライアントにいくつかのjsonをプッシュできるようにしようとしています。

私はws:// localhost:3000で接続すると、 'connection'ブロックの 'ws.send'に静的接続文字列を見ることができるので、ソケットが動作していることを確認できます。私が複数のクライアントに接続すると、ブロードキャストメソッドからログアウトした複数のクライアント。

私がいただければ幸いです欠落している可能性があり何のような任意の助けを借り、

var WebSocketServer = require('uws').Server; 
var wss = new WebSocketServer({ port: 3000 }); // ws://localhost:3000 

// Static test var 
var test_message = { 
    'test': 'Response', 
    'test2': 'Response2' 
}; 

// Broadcast to all. 
wss.broadcast = function broadcast(data) { 
    wss.clients.forEach(function each(client) { 
    console.log('IT IS GETTING INSIDE CLIENTS'); 
    console.log(client); 

    // The data is coming in correctly 
    console.log(data); 
    client.send(data); 
    }); 
}; 

wss.on('connection', function(ws) { 
    ws.on('message', function(message) { 
    wss.broadcast(test_message); 
    console.log('Received: ' + message); 
    }); 

    // TODO This is static just to check that the connection is properly working 
    ws.send('You successfully connected to the websocket.'); 
}); 
+0

を試すことができます。クライアントコードを共有できますか? –

+0

今はソケットをテストするためにクロムエクステンションを使用しているだけで、クライアントは作成されていません。私が使用している拡張機能は "Smart Websocket Client"と呼ばれ、ブロードキャストがこのクライアントの応答部分にメッセージをプッシュするのを見ることができません。助けを感謝します! – parchambeau

答えて

2

私はSmart Websocket Clientであなたのコードをテストしました。あなたのコードは問題ありません。 stringのデータのみをブロードキャストした場合、応答はUIで表示されますが、javascriptobjectの場合、Binary Frames (opcode = 2)としてChrome Developer Toolsという応答が表示されますが、クライアントは表示されません。

ws.send()メソッドは通常の文字列、型付き配列、またはBLOBをサポートしていますが、型付き配列とBLOBを送信すると、クライアントがバイナリフレーム(opcode = 2)として受け取るフレームになります。

あなたはそれが私の場合には動作しているようだJSON.stringifyobject

wss.on('connection', function(ws) { 
    ws.on('message', function(message) { 
    wss.broadcast(JSON.stringify(test_message)); 
    console.log('Received: ' + message); 
    }); 

    ws.send('You successfully connected to the websocket.'); 
}); 
+0

ああ大丈夫です。ヘルプをたくさんいただきありがとうございます。なぜコンソールログのオブジェクトを見ることができたのですが、UIのブロードキャストでは見えません。 – parchambeau

関連する問題