Mad*_*uja 3 time android pubnub
我们正在使用Android构建聊天应用程序,并且很难确定消息的消息排序策略。到目前为止,我们一直在将设备时间用于已发送的消息,并将服务器时间用于已接收的消息。我们意识到,如果设备时间与服务器时间不同步,该策略很容易失败。
作为替代方案,我们计划使用设备时间来发送和接收消息,以保持正确的顺序。考虑到可能会错误地设置设备时间的情况,如果在Publish回调中收到的PubNub timetoken与用户的设备时间相去甚远,我们计划向用户展示祝酒词。下面的代码段:
这是消息排序的可接受策略吗?是否有更好的选择。
public void successCallback(String channel,
Object message) {
if (channel.equals(getUserChannel())) {
JSONArray messageDetails = (JSONArray) message;
if(messageDetails.length() >2)
try {
long timeToken = Long.parseLong(messageDetails.getString(2));
timeToken = timeToken / 10000;
changeMessageStatus(chatMessage.getMobileId(), Status.SENT);
long diffValue = timeToken - Calendar.getInstance().getTimeInMillis();
if(Math.abs(diffValue) > Constants.TIME_DIFF_THRESHOLD)
{
applicationHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), getString(R.string.incorrect_time), Toast.LENGTH_SHORT).show();
}
});
}
Log.d(Constants.TAG,"Diff Time: " + String.valueOf(diffValue));
} catch (JSONException e) {
e.printStackTrace();
}
}
pubnub.unsubscribeAll();
}
Run Code Online (Sandbox Code Playgroud)
PubNub提供了一个timeAPI,可用于在彼此之间毫秒之间同步客户端(每个客户端都有自己的延迟)。这可以通过创建最小缓冲时间量(等待时间)来完成,所有设备在确认信号后同意向前移动该最小缓冲时间量。您可以使用此时间同步API 为每条消息创建订单ID。首先,您需要存储客户端增量漂移并计算当前时间。
请按照以下基本步骤同步具有独立延迟的设备:
start = now()timetoken = http://pubsub.pubnub.com/time/0delay = now() - starttimetoken = timetoken/10000message_order_id = timetoken + delay使用message_order_id到所有设备火灾在特定的时钟同步时间。在message_order_id本质上是你的新的消息的OrderID可用于在屏幕上显示的消息。当您发布聊天消息时,请message_order_id在字典中将其作为条目。
message_order_id = timetoken + delay // new message order id
pubnub.publish({ message : { order_id : message_order_id, message : "Hi!" } });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |