2016-05-25 12 views
0

ソケットとWebソケットの間でプロキシを作成しようとしています。私はソケットサーバー上でリクエストを受け取り、websocketクライアントにプロキシしたいのですが、websocket.ws.sendは未定義です。これを行う正しい方法は何でしょうか? ws.send()をオブジェクトの外側から呼び出す方法は?オブジェクトの外側から関数を呼び出す方法

var WebSocketServer = require('ws').Server, 
wss = new WebSocketServer({port: 8001}), 
var net = require('net') 


websocket = wss.on('connection', function(ws) { 
    ws.on('message', function(message) { 
     console.log('received: %s', message); 
    }); 
    ws.send("NEW USER JOINED"); 
}); 


var socketServer = net.createServer(function(socket) { 
     socket.on("data", function(data){ 
       console.log("Received: "+data) 
       websocket.ws.send("Message") 
     }); 
}); 
socketServer.listen(1337, '127.0.0.1'); 

答えて

2

あなたが持っている問題は、wsが一つの接続のための単一のWebソケットであるということです。これはwebsocketオブジェクトのプロパティではなく、定義したコールバックの引数です。誰かが接続するたびに、messageイベントの特定のWebソケットに関数をバインドできるように、コールバックを実行するconnectionイベントが発生します。

wsオブジェクトを、ソケットサーバーがアクセスできる変数に格納するか、すべてのクライアントにブロードキャストできるかを指定する必要があります。あなたが1つのクライアントだけを持っている場合

wss.clients.forEach(function each(client) { 
    client.send(data); 
}); 

これは、あなたがのWebSocketとソケットサーバの両方に複数の接続を持っている場合しかし、あなたはあなたがのWebSocketを見つけることができるように、両方の接続を識別する方法を使用する必要があり、正常に動作しますあなたはデータを送る必要があります。

関連する問題