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

时间:2010-03-17 08:08:44

标签: network-programming

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

客户端和服务器之间是否存在一些通用的最佳实践。例如,如果客户端没有自己的答案,客户端会自动重试吗?重试之前是否应该有超时期限?如果确认失败会怎样?我们在什么时候断开连接并重新连接?有一些材料吗?我已经完成了搜索,但实际上没有任何事情发生。

我正在寻找一般的最佳做法。我在c#中实现了这个(可能带有套接字),所以如果有特定的.Net,请告诉我。

5 个答案:

答案 0 :(得分:6)

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

如果你以这种方式接近网络,并且不假装你可以远程调用功能或拥有“远程对象”,你会没事的。你从来没有在网络连接的另一端有一个真正的“东西” - 你所拥有的基本上是那个东西的图片。

从网络获得的所有都是旧数据。你永远是最新的。因此,您需要确保消息带有正确的语义 - 例如,您可以按值递增或递减某些值,不应将其值设置为当前值加上或减去另一个值(因为当前值可能当你的消息到达那里时改变。)

答案 1 :(得分:2)

如果客户端和服务器都是用.NET / C#编写的,我建议WCF插入原始套接字,因为它可以节省许多管道代码,包括序列化和反序列化,消息同步等。

虽然可能并没有真正回答你关于最佳实践的问题; - )

答案 2 :(得分:1)

要做的第一件事就是在速度,丢失消息的可能性,名义和峰值流量,瓶颈,客户端和服务器MTBF等方面表征您的特定网络......

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

在少数情况下,您需要构建更强大的功能,以便在通过您无法信任的网络连接的多台计算机之间保持一致的全局状态。

答案 3 :(得分:1)

我发现最重要的是消息总是应该是无状态的(如果这对你没有任何意义,请在REST上阅读)

例如,如果您的应用程序通过网络监控发货数量,则不会发送增量更新(+ x)​​,但总是发送新的更新。

答案 4 :(得分:0)

在对网络编程的共同思考中,我认为你应该了解:
1.套接字(当然)。
2.叉和线程。
3.锁定过程(使用互斥锁或信号量或其他)。

希望这有帮助..