我在AngularJS应用程序中使用web套接字。
当用户注销时,客户端关闭web套接字连接。当用户重新登录时,我需要重新连接web套接字。
web套接字包含在一个服务中(代码简化了一点):
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;
问题是web套接字的新实例不工作。
根据这个问题,web套接字需要在重新创建对象时将其处理程序重新连接到对象。
但是AngularJS的服务是单例的(根据这个问题应该保持单例)。
如何在我的AngularJS单例服务中重新创建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 Socket对象,并手动将Web Sockets处理程序附加到我的AngularJS服务中。