2015-09-09 79 views
0

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

angular.module('myApp').factory("SubscriptionFactory", function() { 
    var Service = {}; 
    var ws = new WebSocket("ws://127.0.0.1:8000"); 

    /* WS methods (onopen, onmessage ect) left out for simplicity */ 

    Service.reestablishConnection = function() { 
     // Reestablishing connection 
     ws = new WebSocket("ws://127.0.0.1:8000"); 
    } 
    return Service; 

的问题是,网络插座的新实例不起作用。
根据this question,web套接字需要在其重新创建时将其处理程序重新附加到该对象。
但是一个AngularJS服务是一个单例(根据this question应该保持单身)。
如何在我的AngularJS单例服务中重新创建Web套接字实例?

回答

0

我自己找到了解决方案。它实际上是非常简单的:

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; 

这里会发生什么事是简单的:IM创建新的Web Socket对象和网络套接字句柄手动连接到我的AngularJS服务。

相关问题