android–PubNub中的聊天消息排序策略

android–PubNub中的聊天消息排序策略,第1张

概述我们正在Android中构建一个聊天应用程序,并且很难确定消息的消息排序策略.现在,我们已经使用设备时间为收到的消息发送消息和服务器时间.如果设备时间与服务器时间不同步,我们意识到这种策略很容易失败.作为替代方案,我们计划将发送和接收消息的设备时间用于维护正确的排序.为了解

我们正在Android中构建一个聊天应用程序,并且很难确定消息的消息排序策略.现在,我们已经使用设备时间为收到的消息发送消息和服务器时间.如果设备时间与服务器时间不同步,我们意识到这种策略很容易失败.

作为替代方案,我们计划将发送和接收消息的设备时间用于维护正确的排序.为了解决设备时间错误设置的情况,我们计划在发布回调中收到的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();            }

解决方法:

如何在多个时区的多个设备上订购聊天消息?

PubNub提供了一个时间API,可用于在一个毫秒之内同步客户端(每个客户端都有自己的延迟).这可以通过创建最小缓冲时间量(等待时间)来完成,所有设备在确认信号后同意向前移动.您可以使用此Time Sync API为每封邮件创建订单ID.首先,您需要存储客户端增量漂移并计算当前时间.

请按照以下基本步骤同步具有独立延迟的设备:

>确定本地时间(以毫秒为单位):start = Now()
>加载服务器timetoken:timetoken = http://pubsub.pubnub.com/time/0
>计算timetoken请求的延迟延迟:delay = Now() – start
>将服务器timetoken转换为毫秒:timetoken = timetoken / 10000
>添加延迟以补偿延迟:message_order_ID = timetoken延迟

使用message_order_ID同步所有设备以在特定时钟时间触发. message_order_ID本质上是您的新消息OrderID,可用于在屏幕上呈现消息.发布聊天消息时,请将message_order_ID作为字典中的条目包含在内.

message_order_ID = timetoken + delay // new message order IDpubnub.publish({ message : { order_ID : message_order_ID, message : "Hi!" } });
总结

以上是内存溢出为你收集整理的android – PubNub中的聊天消息排序策略全部内容,希望文章能够帮你解决android – PubNub中的聊天消息排序策略所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1107765.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存