TCP客户端数据请求

时间:2013-09-15 14:13:19

标签: caching tcp client-server

我正在尝试找到一种在服务器和客户端之间传输数据的有效方法,而不会出现一致性错误,同时保持较低的网络利用率。我以前曾多次反对这种情况,并且总是最终使用以下两种计划之一:

计划#1: 客户端请求所有可用数据(在连接时或首次请求时)。客户端缓存数据并将其用作自己的本地数据库(存储在RAM中)。在对数据进行任何更改(添加,删除,更新)后,服务器会通知客户端,然后客户端更新其缓存

优点: 初始传输后网络利用率低(所有数据都被缓存)。动态更新数据

缺点: 服务器可能需要发送大量数据。这可能会导致网络拥塞甚至导致客户端崩溃

计划#2: 客户端按需请求一些数据(例如,检索列表的前25项)。如果需要更多数据,客户端会请求接下来的25个项目,依此类推。

优点: 简单。无需一次传输所有数据

缺点: 服务器无法动态更新客户端的数据,因为它不知道每个客户端具有哪些数据。出于同样的原因,客户端无法缓存任何数据,因为它们可能会缓存过期的项目。在整个系统使用过程中网络利用率很高。

处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你有一些顺序的数据列表,“(例如,检索列表的前25项)”。

如果是这种情况,您可以让服务器在每个连接的基础上保持“直到记录x”指示符。例如,假设您最初发送前25个项目。服务器保留一条记录,客户端x已经达到记录25.然后客户端需要记录57,所以服务器发送所有内容直到包括记录57.假设记录36得到更新。服务器只能将该更新发送给已经达到至少记录36的客户端。

如果实际上您的数据是一组连续记录,则允许缓存和更新。