2016-05-25 6 views
0

Я пытаюсь сделать прокси между сокетами и websockets. Я получаю запросы на сервер сокетов, и я хочу проксировать их для клиентов 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 является одной веб-сокет для одного соединения. Он не является свойством объекта websocket, но является аргументом для обратного вызова, который вы определяете. Каждый раз, когда кто-то подключается, вы получите событие connection, которое выполнит ваш обратный вызов, что позволит вам связать функцию с этим конкретным веб-сокетом для события message.

Вам необходимо либо сохранить объект ws в переменной, доступной серверу сокета, либо вы можете транслировать все клиенты.

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

Это будет работать хорошо, если у вас есть только один клиент, поэтому если у вас есть несколько подключений как сервер WebSocket и розетки, то вам необходимо использовать метод идентификации соединений на оба, так что вы можете найти WebSocket вам необходимо отправить данные.

Смежные вопросы