我们正在Android中构建一个聊天应用程序,并且很难确定消息的消息订购策略。 Uptil现在,我们一直在使用设备时间来发送已接收消息的消息和服务器时间。如果设备时间与服务器时间不同步,我们意识到这种策略会非常容易失败。PubNub中的聊天消息订购策略
作为替代方案,我们计划使用发送和接收消息的设备时间来维护正确的排序。为了说明设备时间可能错误设置的情况,如果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();
}
Madhur - 让我知道这个KB是否有帮助。 http://www.pubnub.com/knowledge-base/discussion/195/how-do-i-synchronize-multiple-devices#latest – 2015-02-12 15:44:57
等待时间同步与聊天消息排序。您可以使用PubNub时间同步API为设备获取通用时间同步方法,并将其用作每个独立于时区的设备的时间轴。这实际上会工作得很好! – PubNub 2015-02-12 17:00:38
好主意克雷格! – PubNub 2015-02-12 17:27:33