使用JavaScript动态Websocket对象
我想打开不同数量的web套接字,每个套接字连接到不同的服务器。 我将对象存储在一个数组中,并将它们全部分配给相同的事件处理程序使用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
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