如何仅从客户端向服务器发送WebSocketSubject消息?

3
我使用rxjs中的WebSocketSubject为我的websocket连接创建了一个可观察对象。目前为止,服务器-客户端通信正常工作。现在的问题是:我无法区分客户端消息的来源。通过在主题上调用next()发送消息,所有客户端的订阅者都会收到这些消息。如何只向服务器发送消息?
实现主要源自这篇文章:https://medium.com/factory-mind/angular-websocket-node-31f421c753ff 我的代码:
socket$: WebSocketSubject<any>;

constructor() {
  this.socket$ = WebSocketSubject.create(SOCKET_URL);

  this.socket$.subscribe(
    (message) => console.log('<-- ' + message),
    (err) => console.error('Error on WebSocket:', err),
    () => console.warn('Completed!')
   );
}

send(message: SocketMessage) {
  const tmp: any = {};
  tmp.type = message.type;
  tmp.payload = message.payload;
  // This will be received by the server but also by client subscriptions = bad
  this.socket$.next(JSON.stringify(tmp));
}
1个回答

0

我找到了一个解决方案,尝试实现您所描述的行为:

RxJS6 WebSocket文档指出:

调用next不会影响WebSocketSubject的订阅者 - 除非服务器以某种方式响应消息,否则他们没有任何发送到服务器的信息。

因此,使用RxJS6而不是RxJS5,您不应该遇到所描述的行为。


这对我不起作用。在rxjs 6.6中出现了所描述的行为。即使订阅者直到收到消息才被通知,我认为所描述的问题是仅发送一条消息,这有点违背了首先采取主题的方法,我个人认为。 - Beat Scherrer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接