gpt4 book ai didi

javascript - 如何在 JavaScript 中定义和接收来自多个 WebSocket 的数据?

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:13 25 4
gpt4 key购买 nike

我有以下代码片段,我需要扩展它来定义多个 WebSocket,但我不知道如何去做:

    var registerWebSocketHandlers = function(webSocket) {
webSocket.onclose = function(){
setTimeout(service.reopen, reconnectTimeout *= 2);
};

webSocket.onopen = function(e) {
icc.publish('webSocket.reconnect');
reconnectTimeout = defaultReconnectTimeout; //reset this
deferredSend();
};

webSocket.onerror = function(e) {
throw new Error("[WebSocket] An error occured " + e);
};
}

var openConnection = function() {
connectionWasOpenBefore = true;
webSocket = new $window.WebSocket(xyz);
webSocket.id = uniqid();
registerWebSocketHandlers(webSocket);
};

var uniqid = function() {
return (new Date().getTime()).toString(16);
}

service.setMessageEventHandler = function(cb) {
webSocket.onmessage = function(msg) {
if(msg.data.indexOf('Status: connected') === 0)
{
return;
}
var jsonObj = JSON.parse(msg.data);
cb(jsonObj);
};
};

如何调整代码以满足多个 WebSocket 的需求并为其附加适当的回调?

最佳答案

使用 multiton 模式。

var socketFactory = module.factory('SocketFactory', function($rootScope){
var factory = {};
var instances = {};

factory.getInstance = function(name, config){
if(!(name in instances)){
instances[name] = createNewWebSocketInstance(name, config);
}
return instances[name];
};

var createNewWebSocketInstance = function(name, config){
var webSocket = new $window.WebSocket(config.address);
webSocket.id = uniqid();
registerWebSocketHandlers(webSocket, name, config.handlers); //etc.
return webSocket;
};

var registerWebSocketHandlers = function(webSocket, name, handlers){
webSocket.onmessage = function(event){
$rootScope.$emit('SocketMessageReceived_' + name, event.data);
};
//etc...
};

return factory;
});

这将按名称分隔不同的 websocket。使用 getInstance('whatever') 获取标记为 'whatever' 的 websocket。

var firstConfig = {url: '*****', username: '****', password: '****', etc: '****'};
// You only need to pass in the config the first time.
var firstWebSocket = SocketFactory.getInstance('firstSocket', firstConfig);
var secondConfig = {url: '####', username: '####', password: '####', etc: '####'};
var secondWebSocket = SocketFactory.getInstance('secondSocket', secondConfig);

接下来,您可以从任何其他区域通过实例名称访问配置的 Websocket。

var firstWebSocket = SocketFactory.getInstance('firstSocket');
// It would probably be a good idea to add this listener in the SocketFactory instead and broadcast an event when there's a message so multiple listeners can respond to it.
firstWebSocket.onmessage = function(){...};
var secondWebSocket = SocketFactory.getInstance('secondSocket');
secondWebSocket.onmessage = function(){...};

关于javascript - 如何在 JavaScript 中定义和接收来自多个 WebSocket 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com