c# - 通信协议(protocol)的可维护性 - 重叠或单独的请求?

标签 c# network-programming

我目前正在将一个有点广泛的通信协议(protocol)重新设计成更容易使用的东西,这是一个固执己见的问题,但根据您的经验,随着代码变得越来越大,这两个想法中哪一个更容易维护.

有一个客户端和一个服务器。服务器拥有客户端可能需要的信息,A、B、C、D 等。信息不是一组数据(例如名称),而是名称列表。通常是一栏的全部内容。客户端通常会希望这些东西成组,例如 ABC、DEF、ABD 等。没有太多重叠(这意味着,通常 80% 对 A 的请求也是对 B 和 C 的请求)。

随着系统变得越来越大,维护通信协议(protocol)如下所示的系统变得更加容易:

Request 1: Server returns ABC
Request 2: Server returns ABD

Request 1: A
Request 2: B
Request 3: C

等等

我倾向于选择第一个,因为它似乎使代码更容易阅读和使用,并且对组(例如 ABC)有特殊请求,通常可以让服务器在其数据库上运行更少的查询获取所需的信息。但是代码库将比现在大得多,而且由于我已经花时间彻底检查客户端和服务器的通信方式,我想听听这里的人们使用任一/或方法的一些经验.

编辑: 请注意,我不仅谈论网络流量,还谈论服务器如何处理这些请求之类的事情。如果客户端发出三个单独的请求,服务器将必须发出三个数据库查询,而分组请求很可能作为单个查询运行。

最佳答案

我认为这是“过早优化”的情况。

  1. 您不知道是否真的会出现性能问题。
  2. 您将使用您所说的更复杂的代码来解决感知的性能问题。
  3. 实际上,第二个选项的性能可能更差(考虑哪个更重 - 接受连接并处理请求,或发送稍长的响应)?

现在,您更有可能发现任何瓶颈或性能问题都可能与您查找此信息的位置(例如在数据库中)有关。在这种情况下,您可以在不影响协议(protocol)的情况下调整该端的性能(例如,您可以缓存数据库返回的值)。

关于c# - 通信协议(protocol)的可维护性 - 重叠或单独的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340937/

相关文章:

C# 应用程序需要在 Citrix 环境中引用远程工作站

network-programming - 使用DPDK创建tcp/ip连接

c# - 撕毁我的头发 - ASP.Net AJAX AutoComplete 不工作

c# - 将具有相同行为的静态类分组

c# - 如何修复组件启动时的控制台错误

c# - 实际上,具有单个成员的 C# 结构是否与在结构之外使用该单个成员一样高效?

c# - 如果没有通过 using block 实例化实现 IDisposable 的类是否有方法抛出异常?

c++ - 字符串中的IP地址检测(C++)

iPhone网络游戏编程

c - 通过网络发送数据是否有最佳字节大小?