Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:在服务内重新连接WebSocket_Javascript_Angularjs_Sockets_Service_Websocket - Fatal编程技术网

Javascript AngularJS:在服务内重新连接WebSocket

Javascript AngularJS:在服务内重新连接WebSocket,javascript,angularjs,sockets,service,websocket,Javascript,Angularjs,Sockets,Service,Websocket,我在AngularJS应用程序中使用web套接字。 当用户注销时,客户端关闭web套接字连接。 当用户重新登录时,我需要重新连接web套接字 web套接字包含在服务中(代码稍微简化): 问题是web套接字的新实例不起作用。 根据web,重新创建对象时,套接字需要将其处理程序重新附加到对象 但是AngularJS服务是一个单例服务(根据需要应该保持单例)。 如何在AngularJS singleton服务中重新创建web套接字实例 我自己找到了解决办法。其实很简单: angular.module(

我在AngularJS应用程序中使用web套接字。
当用户注销时,客户端关闭web套接字连接。 当用户重新登录时,我需要重新连接web套接字
web套接字包含在服务中(代码稍微简化):

问题是web套接字的新实例不起作用。
根据web,重新创建对象时,套接字需要将其处理程序重新附加到对象
但是AngularJS服务是一个单例服务(根据需要应该保持单例)。

如何在AngularJS singleton服务中重新创建web套接字实例

我自己找到了解决办法。其实很简单:

angular.module('myApp').factory("SubscriptionFactory", function () {
    var Service = {};
    var ws;

    Service.onMessage = function(message) { /* some code */};
    Service.onClose = function() { /* some code */ };
    Service.onOpen = function() { /* some code */};
    Service.onError = function(error) { /* some code */};

    Service.connect = function() {
        // (Re)connect
        ws = new WebSocket("ws://127.0.0.1:8000");
        // Reattaching handlers to object
        ws.onmessage = Service.onMessage;
        ws.onclose = Service.onClose;
        ws.onopen = Service.onOpen;
        ws.onerror = Service.onError;
    }
    return Service;
这里发生的事情很简单:我创建了一个新的Web套接字对象,并手动将Web套接字处理程序附加到我的AngularJS服务

angular.module('myApp').factory("SubscriptionFactory", function () {
    var Service = {};
    var ws;

    Service.onMessage = function(message) { /* some code */};
    Service.onClose = function() { /* some code */ };
    Service.onOpen = function() { /* some code */};
    Service.onError = function(error) { /* some code */};

    Service.connect = function() {
        // (Re)connect
        ws = new WebSocket("ws://127.0.0.1:8000");
        // Reattaching handlers to object
        ws.onmessage = Service.onMessage;
        ws.onclose = Service.onClose;
        ws.onopen = Service.onOpen;
        ws.onerror = Service.onError;
    }
    return Service;