使用JavaScript动态Websocket对象

使用JavaScript动态Websocket对象,javascript,websocket,Javascript,Websocket,我想打开不同数量的web套接字,每个套接字连接到不同的服务器。 我将对象存储在一个数组中,并将它们全部分配给相同的事件处理程序 for (var i = 0; i < servers.length; i++) { var wsUri = constructWebSocketURI(servers[i], port); var currentWebSocket = new WebSocket(wsUri); currentWebSocket.onopen = fun

我想打开不同数量的web套接字,每个套接字连接到不同的服务器。 我将对象存储在一个数组中,并将它们全部分配给相同的事件处理程序

for (var i = 0; i < servers.length; i++) {
    var wsUri = constructWebSocketURI(servers[i], port);
    var currentWebSocket = new WebSocket(wsUri);

    currentWebSocket.onopen = function (evt) { onOpen(evt) };
    currentWebSocket.onclose = function (evt) { onClose(evt) };
    currentWebSocket.onmessage = function (evt) { onMessage(evt) };
    currentWebSocket.onerror = function (evt) { onError(evt) };

    WebSocketsArr.push(ws);
}
for(var i=0;i

但是如何在事件处理程序中区分它们(
onMessage
onError
等)?

您可以更改处理程序函数以接收服务器名称的额外参数(或任何其他值),然后在注册WebSocket时将不同的参数传递给处理程序。您只需注意围绕要用作鉴别器的值创建适当的闭包,例如:

var createFunc = function (handlerToCall, discriminator) {
    return function(evt) {
        handlerToCall(evt, discriminator);
    };
}

for (var i = 0; i < servers.length; i++) {
    var wsUri = constructWebSocketURI(servers[i], port);
    var currentWebSocket = new WebSocket(wsUri);
    var currentServerName = "server_" + i; // or whatever

    currentWebSocket.onopen = createFunc(onOpen, currentServerName);
    currentWebSocket.onclose = createFunc(onClose, currentServerName);
    currentWebSocket.onmessage = createFunc(onMessage, currentServerName);
    currentWebSocket.onerror = createFunc(onError, currentServerName); 

    WebSocketsArr.push(currentWebSocket);
}
var createFunc=函数(handlerToCall,鉴别器){
返回函数(evt){
handlerToCall(evt,鉴别器);
};
}
对于(var i=0;i