消息自动补发 - Websocket消息推送(Pubsub)
GoEasy websocket消息自动补发,分为断网补发和离线补发两种情况:
- 断网补发:断网指用户在正常使用期间(浏览器没有关闭或刷新,小程序或APP进程没有销毁),因网络不稳定(路由器故障、进入电梯或地下停车场)导致与GoEasy的连接断开。断网后,GoEasy将自动持续尝试重连,一旦网络恢复,GoEasy将自动补发断网期间的消息,称为断网补发。
- 离线补发:离线指用户退出应用(浏览器关闭或刷新,小程序或APP的进程被销毁)。 当用户再次进入应用成功订阅同一个channel,GoEasy可自动补发用户离线期间的消息,称为离线补发。
设置消息自动补发
发送每条消息时,增加名为qos的参数,qos设为1:网络恢复后,该消息将自动补发,qos设为0则无需补发,不指定qos参数时,默认为0,该消息无需补发。
2023年3月1日之前创建的GoEasy应用,所有消息的qos默认值为1,默认自动补发,老用户除了可以发送消息时通过增加参数指定qos值,也可以在线联系GoEasy工作人员修改应用qos默认值。
- Javascript
- Rest API
- Java
goEasy.pubsub.publish({
channel: "test_channel",
message: {text:'Hello, GoEasy!'},
qos: 1, // 为1启用补发,0无需补发,默认为0。SDK需升级至2.6.2以上
onSuccess:function(){
console.log("消息发布成功。");
},
onFailed: function (error) {
console.log("消息发送失败,错误编码:"+error.code+" 错误信息:"+error.content);
}
}
// 增加qos参数,1为启用补发,0无需补发,默认为0,不补发
//macOS/Linux
curl -X POST https://rest-hz.goeasy.io/v2/pubsub/publish \
-H "Content-Type: application/json" \
-d "{
'appkey':'您的appkey',
'channel':'test_channel',
'qos':1,
'content':'{text:\"Hello, GoEasy!\"}'
}"
//Windows
curl -X POST http://rest-hz.goeasy.io/v2/pubsub/publish ^
-H "Content-Type: application/json" ^
-d "{ appkey:'您的appkey', channel:'test_channel', qos:1, content:'{text:\"Hello, GoEasy!\"}' }"
//GoEasy Java SDK需升级至0.4.2以上
GoEasy goEasy = new GoEasy( "http://rest-hz.goeasy.io”, "您的appkey");
goEasy.publish("test_channel", "{text:'Hello, GoEasy!'}", 1, new PublishListener(){
@Override
public void onSuccess() {
System.out.println("Publish success.");
}
@Override
public void onFailed(GoEasyError error) {
System.out.println("Failed to Publish message, error:" + error.getCode() + " , " + error.getContent());
}
});
启用用户离线补发
要启用用户离线消息自动补发,除了发送消息时指定qos=1,还需要在调用connect建立连接时,设置用户id,否则GoEasy不能识别用户身份, 无法进行离线消息补发, 若只需要断网补发,无需指定用户id.
用户建立连接时指定用户id,发送的消息qos为1,当用户离线再重新进入应用channel订阅成功后,系统将自动补发离线期间的所有消息。
goeasy.connect({
id: "用户唯一标识,如 user-001", //要启用离线补发,必须指定用户id
onSuccess: function () {
console.log("GoEasy connect successfully.")
},
onFailed: function (error) {
console.log("Failed to connect GoEasy, code:" + error.code + ",error:" + error.content);
}
});