我正在尝试使用 Angular 1.5(使用 ES6)创建一个服务或工厂,我可以在其中拥有多个实例,每个实例与 WebSocket 有不同的连接(其主要目的是聊天系统)。
我能够提供适用于单个 WebSocket 连接的服务,但考虑到这个项目的目的,我需要能够连接到不同的“房间”,但每个房间都有一个具有不同连接参数的 URL(就像这样: ws://localhost:8080/chat/<param1>/<param2>
)。
我正在使用angular-websocket ( https://github.com/AngularClass/angular-websocket )。由于我在严格模式下使用 ES6,我必须$websocket
从这个库中注入并立即在构造函数上创建它的一个实例。
所以,我正在寻找的是:能够创建多个 WebSocket 连接,理想情况下是在服务/工厂中,其中每个都有自己的连接参数(将在该服务将被实例化的控制器上给出) ,然后每个实例将能够管理新的相应“房间”消息的发送/接收。
使用 ES5,我可能会创建一个非单例服务或工厂,这可能会解决这个问题,但是当我正在学习 ES6 时,我真的很想以这种方式解决这个问题。这是我当前的聊天服务类,目前只能处理静态连接,它是一个单例。
export default class ChatService {
constructor($websocket) {
'ngInject';
this._$websocket = $websocket('wss://localhost:8080/chat' + '/param1/param2');
this.collection = [];
this.init();
}
init() {
this._$websocket.onMessage(this.onMessage);
this._$websocket.onOpen(this.onOpen);
this._$websocket.onClose(this.onClose);
this._$websocket.onError(this.onError);
}
onOpen() {
console.log('Connection open');
}
onClose(event) {
console.log('Connection closed: ', event);
}
onError(event) {
console.log('Connection Error: ', event);
}
onMessage(message) {
this.collection.push(JSON.parse(message.data));
}
closeSocket() {
this._$websocket.close();
}
sendMessage(text) {
// Code to send a message using this connection
}
}
如果您对如何解决此问题有任何其他建议,我会全力以赴。
谢谢你。