Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 高效无阻塞服务器的UDP或Unix套接字?_Java_Linux_Jakarta Ee_Nio - Fatal编程技术网

Java 高效无阻塞服务器的UDP或Unix套接字?

Java 高效无阻塞服务器的UDP或Unix套接字?,java,linux,jakarta-ee,nio,Java,Linux,Jakarta Ee,Nio,我正在编写一个服务器(基于Java),它将仅由同一主机上的程序调用 因此,在性能和可靠性方面,我应该使用UDP还是仅使用Unix套接字?UDP不可靠。我在吹毛求疵,但无法保证使用UDP发送订单或交付。在同一主机上的两个进程之间,这可能永远不会成为问题,但在极端负载情况下可能会出现 UDP数据包中的开销也比Unix套接字中的开销大得多。同样,除了在最极端的负载下,这不太可能是一个实际问题,在这成为一个问题之前,你会遇到很多其他与负载相关的问题,因为在现代计算术语中,两者的开销都是名义上的 如果您真

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


因此,在性能和可靠性方面,我应该使用UDP还是仅使用Unix套接字?

UDP不可靠。我在吹毛求疵,但无法保证使用UDP发送订单或交付。在同一主机上的两个进程之间,这可能永远不会成为问题,但在极端负载情况下可能会出现

UDP数据包中的开销也比Unix套接字中的开销大得多。同样,除了在最极端的负载下,这不太可能是一个实际问题,在这成为一个问题之前,你会遇到很多其他与负载相关的问题,因为在现代计算术语中,两者的开销都是名义上的

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

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

话虽如此,这些天来都不是一个实际问题。大多数服务甚至使用TCP进行本地通信,然后再将其他服务分层,如在该层之上。几乎可以肯定的是,您不应该担心这样的性能水平。使用使代码更易于编写和维护的软件,并在不太可能发生的情况下扩展系统。将新服务器投入到问题中比花上几个小时重新设计不灵活的软件更容易、更便宜

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


永远不要过早地进行优化。

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