我正在尝试在套接字和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');
答案 0 :(得分:2)
您遇到的问题是ws
是一个连接的单个Web套接字。它不是websocket
对象上的属性,而是您定义的回调的参数。每当有人连接时,您将获得一个connection
事件,该事件将执行您的回调,允许您将函数绑定到message
事件的特定Web套接字。
您需要将ws
对象存储在套接字服务器可以访问的变量中,或者您可以向所有客户端广播。
wss.clients.forEach(function each(client) {
client.send(data);
});
如果你只有一个客户端,这将正常工作,但是如果你有多个连接到websocket和socket服务器,那么你需要使用一种识别两者的连接的方法,这样你就可以找到你需要的websocket连接发送数据到。