在过去,我们使用了几个angular2 websocket impelmentations但我们对它们并不满意,使用它们有几个问题。所以我们决定用我们自己的RxJs来做我们的财富。
这是我们的第一次尝试:
var text = `fjskdfjslfjsl
skfjslfkjsldfjslfjs
jfsfkjslfsljs`;
套接字打开并且运行良好一段时间。几秒钟后,浏览器关闭了套接字,我在服务器端收到了关闭事件。
这是我们在服务器网站上获得的结果: [1006] WebSocket阅读EOF
有人可以提供帮助吗?或者有人知道如何使用WebSocketSubject吗?
答案 0 :(得分:1)
我不知道它是否仍然相关但我确实使用类似于websocket连接的角度与https://github.com/ohjames/rxjs-websockets
我在组件中进行的一些修改,我调用ServerSocketService(用于连接到基于websocket的端点),即重试机制,我使用了ReplaySubject而不是示例中给出的QueuingSubject。
@Injectable()
export class ServerSocket {
// private inputStream: QueueingSubject<string>;
private inputStream: ReplaySubject<string>;
public messages: Observable<string>;
private subscription: Subscription;
private websocket: WebSocket;
public connect() {
if (this.messages) {
return;
}
console.log('inside connect');
// this.inputStream = new QueueingSubject<string>();
this.inputStream = new ReplaySubject();
// Using share() causes a single websocket to be created when the first
// observer subscribes. This socket is shared with subsequent observers
// and closed when the observer count falls to zero.
this.messages = websocketConnect(
'ws://localhost:9097/echo',
this.inputStream
).messages.share();
this.messages.retryWhen(errors => errors.delay(1000)).subscribe(message => {
console.log('error', message);
});
}
public send(message: string): void {
// If the websocket is not connected then the QueueingSubject will ensure
// that messages are queued and delivered when the websocket reconnects.
// A regular Subject can be used to discard messages sent when the websocket
// is disconnected.
this.inputStream.next(message);
}
}
然后在组件的OnInit生命周期内部进行连接,订阅然后发送消息。一旦组件到达其OnDestroy生命周期,就可以通过取消订阅来释放资源。