在 Android 中订购 http API 调用
Ordering http API Calls in Android
先说明一下我的问题:
我们正在使用 HTTP REST 协议传输聊天消息。对于聊天消息,消息的排序至关重要。由于 HTTP 是一种无状态协议,我们观察到在服务器上接收到的消息是乱序的。
例如,如果我们发送 A、B 和 C - 服务器上收到的订单可以是 C、B 和 A。
有办法解决吗?我不确定 HTTP 请求是否可以在 Android 中排序。即使我们尝试这样做,也可能会降低其效率,因为一次只会执行一个 HTTP 请求。
是否有解决此问题的既定模式?
他们以不可预测的顺序到达的原因是因为这是网络的本质。数据包通过不同的路由点传输,您不能强制它们按顺序排列。即使您按顺序发送它们,也不能保证它们按顺序到达。
但好消息是,您可以通过多种不同的方式实现您的目标。
- 您可以等待服务器回复 OK,然后再提交下一条消息。这样可以保证顺序,但是你会失去多线程。
- 更好的解决方案是用 order_id 或时间戳标记每条消息。然后服务器将它们排序。
在我的例子中,我为每个请求分配了时间戳,然后将它们保存在我的数据库中。用户可能会看到他们的消息是无序的,尤其是当他们聊天速度非常快时。但是当它们刷新时,服务器将 return 基于注册的时间戳的有序列表。
先说明一下我的问题:
我们正在使用 HTTP REST 协议传输聊天消息。对于聊天消息,消息的排序至关重要。由于 HTTP 是一种无状态协议,我们观察到在服务器上接收到的消息是乱序的。
例如,如果我们发送 A、B 和 C - 服务器上收到的订单可以是 C、B 和 A。
有办法解决吗?我不确定 HTTP 请求是否可以在 Android 中排序。即使我们尝试这样做,也可能会降低其效率,因为一次只会执行一个 HTTP 请求。
是否有解决此问题的既定模式?
他们以不可预测的顺序到达的原因是因为这是网络的本质。数据包通过不同的路由点传输,您不能强制它们按顺序排列。即使您按顺序发送它们,也不能保证它们按顺序到达。 但好消息是,您可以通过多种不同的方式实现您的目标。
- 您可以等待服务器回复 OK,然后再提交下一条消息。这样可以保证顺序,但是你会失去多线程。
- 更好的解决方案是用 order_id 或时间戳标记每条消息。然后服务器将它们排序。
在我的例子中,我为每个请求分配了时间戳,然后将它们保存在我的数据库中。用户可能会看到他们的消息是无序的,尤其是当他们聊天速度非常快时。但是当它们刷新时,服务器将 return 基于注册的时间戳的有序列表。