为网络创建自定义 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。
我是 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。