Network programming 是否有一些通用的网络编程最佳实践?

Network programming 是否有一些通用的网络编程最佳实践?,network-programming,Network Programming,我正在我们的项目中实现一些网络功能。已经决定沟通非常重要,我们希望同步进行沟通。因此,客户端发送服务器确认的内容 对于客户机和服务器之间的交互,有一些通用的最佳实践。例如,如果服务器没有应答,客户端是否应该自动重试?在重试之前是否应该有一个超时时间?如果确认失败怎么办?我们在什么时候断开连接并重新连接?有什么材料吗?我已经做了搜索,但没有任何结果 我正在寻找一般的最佳实践。我在c#中实现这一点(可能是使用套接字),因此如果有任何特定于.Net的内容,请也告诉我。如果客户端和服务器都是用.Net/

我正在我们的项目中实现一些网络功能。已经决定沟通非常重要,我们希望同步进行沟通。因此,客户端发送服务器确认的内容

对于客户机和服务器之间的交互,有一些通用的最佳实践。例如,如果服务器没有应答,客户端是否应该自动重试?在重试之前是否应该有一个超时时间?如果确认失败怎么办?我们在什么时候断开连接并重新连接?有什么材料吗?我已经做了搜索,但没有任何结果


我正在寻找一般的最佳实践。我在c#中实现这一点(可能是使用套接字),因此如果有任何特定于.Net的内容,请也告诉我。

如果客户端和服务器都是用.Net/c编写的,我建议使用WCF代替原始套接字,因为它可以为您节省大量的管道代码,包括序列化和反序列化、消息同步等


但这可能并不能真正回答您关于最佳实践的问题;-)

首先要做的是从速度、消息丢失概率、标称和峰值流量、瓶颈、客户端和服务器MTBF等方面描述您的特定网络

然后,也只有到那时,你才能决定你的协议需要什么。在许多情况下,您不需要复杂的错误处理机制,并且可以使用普通UDP可靠地实现服务


在少数情况下,为了在通过网络连接的多台机器之间保持一致的全局状态,您需要构建更加健壮的工具。

我发现最重要的一点是消息始终应该是无状态的(如果这对您没有任何意义,请在REST上读取)


例如,如果您的应用程序监视网络上的发货数量,则不会发送增量更新(+x),而是始终发送新的总数。

网络的第一条规则-您发送的是消息,而不是调用函数

如果你用这种方式建立网络,不要假装你可以远程调用函数或者拥有“远程对象”,你会没事的。在网络连接的另一端,你从来没有真正的“东西”——你所拥有的基本上就是那个东西的一张图片


你从网络上得到的一切都是旧数据。你永远都不是最新的。因此,您需要确保您的消息具有正确的语义-例如,您可以通过一个值来增加或减少某个值,您不应该将其值设置为当前值加上或减去另一个值(因为当前值在消息到达时可能会改变)。

在网络编程的常见想法中,我认为您应该了解:
1.插座(当然)
2.叉和螺纹。
3.锁定过程(使用互斥、信号量或其他方式)。


希望这对你有帮助。

这很有意义。好建议。幸运的是,我们的消息是无状态的。这更多的是巧合而不是设计:)对你有好处!我最近不得不回顾性地更改一个应用程序,该应用程序具有针对所有类型事物的切换消息,这最终会让人感到困惑。有些场景确实需要非无状态消息——这取决于具体情况。然而,首先进入无国籍状态是一个很好的启发。像“切换信息”这样的东西本质上是不好的。另一方面,正如我在回答中指出的,像“增量”这样的东西通常正是您想要的,因为它在服务器上总是做正确的事情(如果您认为当前值为4,则“设置为5”),谢谢,但不是真的。所有这些都很好。我只是在寻找一些一般的指导方针。例如,使用ACK等。我不学习线程,而是学习非阻塞IO(如果是在套接字级别工作的话)。可能有兴趣。