排队 websocket 请求直到初始化/处理队列

Queue websocket requests until initialized / process queue

我有一个 Angular2 websocket 应用程序,它需要在我发送任何其他消息之前完成连接上的握手。

我的 "widget" 控制器使用 "network" 服务,它是 websockets 的包装器

import { $WebSocket } from 'angular2-websocket/angular2-websocket';

"widget's" ngOnit 在握手完成之前发送了一个 websocket 消息。

如何确保该服务在处理之前将传出消息/"wait" 排队,以便 init/handshake 完成?

我觉得我做的比应该做的更难

您可能希望首先对应用程序的其余部分透明地显示需要握手的事实。

您可以将应用程序的其余部分发送的消息存储在 replay subject 中,它们将被堆积起来供以后使用。

您想将缓冲区大小设置为一个可以保留所有消息但不会导致内存问题的值。

稍后当握手完成时,您订阅重播主题,您将获得现在 websocket 握手完成后需要发送的所有消息。

对于应用程序的其余部分,此缓冲是透明的:应用程序的其余部分正在调用 messageService.send(),它在 ReplaySubject.

中进行内部缓冲

消息发送者订阅重播主题并获取所有要发送的消息:它没有指示消息是缓冲的还是实时发送的,这对缓冲消息的消费者是透明的。