subscribe<T, R>(data: T, topic: string, namespace = '') {
const uniKey = namespace + topic
const source = this.webSocket.multiplex(
() => {
// 这个 subMsg 想要被定时重发
const subscribeData: Messages.Client.Subscribe<T> = {
data,
topic,
nsp: namespace,
cmd: COMMAND.MESSAGE_CMD_SUBSCRIBE,
}
return subscribeData
},
() => {
const unSubScribeData: Messages.Client.UnSubscribe = {
topic,
cmd: COMMAND.MESSAGE_CMD_UNSUBSCRIBE,
}
return unSubScribeData
},
(message) => {
if (message.cmd === COMMAND.MESSAGE_CMD_PUBLISH) {
const msg = message as Messages.Server.Subscribed<R>
const subKey = msg.nsp + msg.topic
return subKey === uniKey
}
return false
}
)
return source.subscribe()
}
在封装一个即时通讯业务 SDK ,需要实现一个 subscribe 订阅方法,发送到服务端的订阅消息需要被定时重发,用来实现消息的续订的效果(无法通过心跳等其他方式维系),也就是需要定时重发 multiplex 这边的 subMsg ,但不重生生成一个订阅源,请教一下应该如何实现?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.