为网络创建自定义 Rxjs Observable

Create Custom Rxjs Observable for network

我是 Rxjs 的初学者,我正在做一个游戏项目,有一个网络工具是:

函数sendPacket发送,服务器响应函数onReceived

sendPacket: function(packet) {
  this._tcpClient.sendToServer(packet);
}
onReceived: function (pkg) {
}

我想重构当前的网络结构,如 Angular HttpClient: sendPacket return 一个 Observable 我只需要 subscribe 这样的:

network.sendPacket(myPacket).subscribe(response => ...)

我怎样才能实现这个想法?非常感谢

这篇文章中有答案,它是为绝对初学者准备的,所以你应该掌握所有内容。

如果您只对发出请求的 Observable 感兴趣,请向下滚动到末尾

https://justeugen.medium.com/rxjs-for-beginners-1-c87f92f4a9d2

如果我对你的问题的理解正确,问题是你的 onReceived 是一个“全局”函数,与数据包的发送没有直接关联。您需要在其中存储观察者以备后用,它可以在 onReceived 中访问。类似于:

let savedObserver = null;

sendPacket: function(packet) {
  return new Observable(observer => {
    this._tcpClient.sendToServer(packet);
    savedObserver = observer;
  })
}

onReceived: function (pkg) {
  if (savedObserver) {
    savedObserver.next(pkg);
    savedObserver.complete();
    savedObserver = null;
  }
}

但是,以上假定一次只能有 1 个请求。为了允许多个并行请求,您需要为每个请求存储一个 observable,然后能够 link 对请求的响应并找到正确的 observable。