如何从对象外部调用函数

时间:2016-05-25 10:15:19

标签: javascript node.js

我正在尝试在套接字和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');

1 个答案:

答案 0 :(得分:2)

您遇到的问题是ws是一个连接的单个Web套接字。它不是websocket对象上的属性,而是您定义的回调的参数。每当有人连接时,您将获得一个connection事件,该事件将执行您的回调,允许您将函数绑定到message事件的特定Web套接字。

您需要将ws对象存储在套接字服务器可以访问的变量中,或者您可以向所有客户端广播。

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

如果你只有一个客户端,这将正常工作,但是如果你有多个连接到websocket和socket服务器,那么你需要使用一种识别两者的连接的方法,这样你就可以找到你需要的websocket连接发送数据到。