GraphQL 订阅特定房间的(按 roomId)设置更改
GraphQL subscribe to specific room's (by roomId) settings change
我想使用 gql 订阅来观察游戏房间的设置变化。我有具有唯一 roomCode 的房间列表。每个房间都有设置属性。
示例:
class Room {
roomCode: string;
settings: {
difficulty
otherSetting
}
}
现在我想订阅房间的设置更改(NestJS 示例):
@Subscription((type) => RoomSetting)
async roomSettingsChanged(@Args("roomCode") roomCode: RoomCode) {
return this.pubSub.asyncIterator("roomSettingsChanged");
}
@Mutation((type) => RoomSetting)
async changeRoomSettings(
@Args("roomCode") roomCode: RoomCode,
@Args("RoomSettingsData") roomSettingsData: RoomSettingsData
): Promise<RoomSetting> {
const newRoomSettings = await this.roomsSerive.changeRoomSettings(
roomCode,
roomSettingsData
);
this.pubSub.publish("roomSettingsChanged", {
roomSettingsChanged: newRoomSettings,
});
return newRoomSettings;
}
RoomSettings 的样子:
RoomSettings {
difficulty: "hard",
otherSetting: "blabla"
}
现在我如何在订阅中识别某些 roomSettings 属于带有我在订阅参数中传递的 RoomCode 的房间?我可以在 pubSub.publish 中的一些额外变量中传递 roomCode 吗?或者也许在 pubSub 中我可以通过设置传递整个 Room 对象(那么如何在订阅解析器中只获取设置)? RoomSettings 没有任何标识值(仅属于具有唯一 roomCode 的房间)。我想实现这个场景:
- 有人订阅“roomSettingsChanged”并将 roomCode 作为参数传递
- 当有人更改房间设置时,订阅该房间设置更改的客户会收到更新值通知。
我可能找到了似乎按预期工作的解决方案。在订阅触发字符串中附加 roomCode,例如:
this.pubSub.asyncIterator("roomSettingsChanged" + roomCode);
我想使用 gql 订阅来观察游戏房间的设置变化。我有具有唯一 roomCode 的房间列表。每个房间都有设置属性。
示例:
class Room {
roomCode: string;
settings: {
difficulty
otherSetting
}
}
现在我想订阅房间的设置更改(NestJS 示例):
@Subscription((type) => RoomSetting)
async roomSettingsChanged(@Args("roomCode") roomCode: RoomCode) {
return this.pubSub.asyncIterator("roomSettingsChanged");
}
@Mutation((type) => RoomSetting)
async changeRoomSettings(
@Args("roomCode") roomCode: RoomCode,
@Args("RoomSettingsData") roomSettingsData: RoomSettingsData
): Promise<RoomSetting> {
const newRoomSettings = await this.roomsSerive.changeRoomSettings(
roomCode,
roomSettingsData
);
this.pubSub.publish("roomSettingsChanged", {
roomSettingsChanged: newRoomSettings,
});
return newRoomSettings;
}
RoomSettings 的样子:
RoomSettings {
difficulty: "hard",
otherSetting: "blabla"
}
现在我如何在订阅中识别某些 roomSettings 属于带有我在订阅参数中传递的 RoomCode 的房间?我可以在 pubSub.publish 中的一些额外变量中传递 roomCode 吗?或者也许在 pubSub 中我可以通过设置传递整个 Room 对象(那么如何在订阅解析器中只获取设置)? RoomSettings 没有任何标识值(仅属于具有唯一 roomCode 的房间)。我想实现这个场景:
- 有人订阅“roomSettingsChanged”并将 roomCode 作为参数传递
- 当有人更改房间设置时,订阅该房间设置更改的客户会收到更新值通知。
我可能找到了似乎按预期工作的解决方案。在订阅触发字符串中附加 roomCode,例如:
this.pubSub.asyncIterator("roomSettingsChanged" + roomCode);