Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android PubNub中的聊天消息排序策略_Android_Time_Pubnub - Fatal编程技术网

Android PubNub中的聊天消息排序策略

Android PubNub中的聊天消息排序策略,android,time,pubnub,Android,Time,Pubnub,我们正在Android中构建聊天应用程序,很难决定消息的消息排序策略。正常运行时间现在,我们使用设备时间发送消息,使用服务器时间接收消息。我们意识到,如果设备时间与服务器时间不同步,这种策略很容易失败 作为替代方案,我们计划使用发送和接收消息的设备时间来维持正确的顺序。为了解释可能错误设置设备时间的情况,如果发布回调中接收到的PubNub timetoken与用户的设备时间相差很远,我们计划向用户显示toast。下面的代码片段: 这是一种可接受的消息排序策略吗?有更好的选择吗 public vo

我们正在Android中构建聊天应用程序,很难决定消息的消息排序策略。正常运行时间现在,我们使用设备时间发送消息,使用服务器时间接收消息。我们意识到,如果设备时间与服务器时间不同步,这种策略很容易失败

作为替代方案,我们计划使用发送和接收消息的设备时间来维持正确的顺序。为了解释可能错误设置设备时间的情况,如果发布回调中接收到的PubNub timetoken与用户的设备时间相差很远,我们计划向用户显示toast。下面的代码片段:

这是一种可接受的消息排序策略吗?有更好的选择吗

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提供了一个
time
API,可用于在毫秒内同步客户端(每个客户端都有自己的延迟)。这可以通过创建一个最小缓冲时间量(等待时间)来完成,所有设备在确认信号后同意向前移动。您可以使用此时间同步API为每条消息创建一个订单ID。首先,您需要存储客户端增量漂移并计算当前时间

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

  • 确定本地时间(毫秒):
    start=now()
  • 加载服务器时间令牌:
    timetoken=http://pubsub.pubnub.com/time/0
  • 计算timetoken请求的延迟延迟:
    delay=now()-start
  • 将服务器timetoken转换为毫秒:
    timetoken=timetoken/10000
  • 添加延迟以补偿延迟:
    message\u order\u id=timetoken+delay
  • 使用
    message\u order\u id
    同步在特定时钟时间启动的所有设备。
    message\u order\u id
    本质上是新的message order id,可用于在屏幕上呈现消息。发布聊天信息时,请将
    消息\u order\u id
    作为条目包含在词典中

    message_order_id = timetoken + delay // new message order id
    pubnub.publish({ message : { order_id : message_order_id, message : "Hi!" } });
    

    Madhur-让我知道这个知识库是否有用。等等,这是同步和聊天信息排序的时间。您可以使用PubNub时间同步API获取设备的通用时间同步方法,并将其用作独立于时区的每个设备的时间线。那实际上会很有效的!好主意,克雷格!谢谢克雷格。。非常helpful@MadhurAhuja我在发送订单信息时遇到问题。我已经在浏览器上发布了来自python和subcribe的消息。浏览器上消息的顺序不正确。看来你已经解决了这个问题。你能告诉我如何订购聊天信息吗?