UDP或Unix Socket用于高效非阻塞服务器?

时间:2013-03-23 03:09:24

标签: java linux java-ee nio

我正在编写一个服务器(基于Java),它只能由同一主机上的程序调用。

所以,就性能而言,可靠性,我应该使用UDP还是只使用Unix Socket?

2 个答案:

答案 0 :(得分:1)

UDP不可靠。我正在挑选尼特,但无法确保使用UDP完成交货订单或交货。在同一主机上的两个进程之间,这可能永远不会表现为问题,但在极端负载情况下可能会出现这种情况。

UDP包中的开销也比Unix套接字要多得多。同样,这不太可能是一个实际问题,除非在极端负载下,并且在此之前您还有很多其他与负载相关的问题,因为两者的开销在现代计算术语中都是名义上的。

如果您真的担心性能和可靠性,请坚持使用Unix套接字。

如果您计划在将来分发和负载均衡,如果您需要支持多个主机,UDP将为您提供更大的灵活性。

尽管如此,如今这些都不是实际问题。大多数服务使用TCP进行本地通信,然后将ZeroMQ之类的其他服务分层。你几乎肯定不应该担心这种性能水平。使用能够使代码更易于编写和维护的软件,并在您不需要的情况下扩展系统。投入新服务器遇到问题比花费工时重新设计软件更灵活,更容易,也更便宜。

另请注意,ZeroMQ(和其他消息排队系统)将选择最有效的传输机制。例如,如果可能的话,ZeroMQ将使用IPC(进程间通信),这比UDP或Unix套接字要快得多,并且如果你需要,它还可以通过Internet扩展到全球数千台主机,并且你基本上赢了& #39; t必须更改您的代码。

永远不要过早优化。

答案 1 :(得分:0)

unix套接字肯定会通过tcp / ip堆栈为你节省上下文切换和封装/解封装的开销。但是获得的收益多么明显?我认为这取决于您对性能和可靠性的要求以及您期望该服务器处理的负载。