Мы создаем чат-приложение на Android и с трудом выбираем стратегию упорядочения сообщений для сообщений. До сих пор мы использовали время устройства для отправленных сообщений и время сервера для полученных сообщений. Мы поняли, что эта стратегия может очень легко потерпеть неудачу, если время устройства не синхронизировано со временем сервера.
В качестве альтернативы мы планируем использовать время устройства как для отправленных, так и для полученных сообщений, чтобы сохранить правильный порядок. Чтобы учесть случаи, когда время устройства может быть установлено неправильно, мы планируем показывать всплывающее уведомление пользователю, если маркер времени PubNub, полученный в обратном вызове публикации, отличается от времени устройства пользователя. Фрагмент кода ниже:
Является ли это приемлемой стратегией для упорядочения сообщений? Есть ли лучшие альтернативы.
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();
}