Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 nio套接字通信_Java_Sockets_Networking_Communication_Nio - Fatal编程技术网

位于一台机器或两台机器上的两个进程的Java nio套接字通信

位于一台机器或两台机器上的两个进程的Java nio套接字通信,java,sockets,networking,communication,nio,Java,Sockets,Networking,Communication,Nio,我不熟悉人际网络,问了一个简单的问题,这让我很困惑。我希望有很多网络知识的人能帮上忙 我不断地从进程A向进程B发送消息。如果A和B位于同一台机器上,平均端到端延迟约为6毫秒;如果A和B位于本地网络中的两台机器上(由一个非常简单的路由器连接),则平均端到端延迟约为176毫秒。进程A和进程B使用java非阻塞套接字进行通信。每条消息的大小为10 KB,一条消息的消息副本将发送给不同的接收者 另一个测试是改变消息副本的大小。在本测试中,有三个进程(A、B和C),其中进程A向进程B发送消息,进程B向进程

我不熟悉人际网络,问了一个简单的问题,这让我很困惑。我希望有很多网络知识的人能帮上忙

我不断地从进程A向进程B发送消息。如果A和B位于同一台机器上,平均端到端延迟约为6毫秒;如果A和B位于本地网络中的两台机器上(由一个非常简单的路由器连接),则平均端到端延迟约为176毫秒。进程A和进程B使用java非阻塞套接字进行通信。每条消息的大小为10 KB,一条消息的消息副本将发送给不同的接收者

另一个测试是改变消息副本的大小。在本测试中,有三个进程(A、B和C),其中进程A向进程B发送消息,进程B向进程C发送消息。如果发送一份消息副本,End2End延迟约为10ms;如果连续发送两个消息副本(20KB),end2end延迟为147毫秒;如果一个接一个(40 KB)发送四份消息副本,End2结束延迟约为800毫秒。 每1000毫秒发送一条新消息

消息副本之间没有延迟。当发送的邮件副本数量增加时,为什么成本增长如此之快?这与我的网络配置或编码问题有关吗?造成这种差异的原因是什么

部分代码位于此链接:


在开始时,我认为这是缓慢的,因为tcp缓冲区已满,当有新的写入空间时,进程必须等待。在一些参考资料中,tcp的等待时间可能是200毫秒。这是否符合我的问题以及如何验证它

通过网络总是比在给定的CPU内慢

通过网络总是比在给定的CPU内慢

对于这样数量的数据,本地计算机和网络上的时间似乎都有点慢。当然,这还取决于对数据执行什么处理,以及是同步还是异步执行。例如,在一行中发送多个请求时的速度减慢可以通过异步处理数据来解释。如果将数据从请求中提取出来并放入队列中进行“处理”,然后立即发送响应,则响应速度可能相对较快。如果在返回前处理队列时必须阻止后续请求,这可能解释了速度减慢的原因。但我只是在猜测这一点

网络上的请求速度显然取决于物理距离、跳数等,但这些数字似乎表明它通常比应该的慢。最可能的原因是代码中的逻辑不正确。。。但是如果没有更多的信息,猜测原因就不容易了(至少对我来说是这样)

出于好奇,我刚刚运行了一些快速测试,通过本地机器上的套接字发送消息,每个请求都是10K(响应包小得多)。平均往返时间仅为0.22毫秒。对网络上两跳之外的服务器进行的类似测试平均每次往返时间为1.9毫秒。这是使用TCP/IP。使用UDP连接到两跳之外的服务器,平均时间为1.7毫秒

因此,您看到的速度似乎相当慢(但我的测试的硬件和网络速度可能与您的设置没有任何共同之处……因此这些数字对您来说只是略微有用)


不过,更具价值的是,您可以使用
ping
来获得预期需要多长时间的基线。您可以指定ping的数据包大小(-s选项或可能-l,具体取决于您使用的版本)。对我在另一个测试中运行的两台机器进行ping操作,验证了时间的合理性。

本地机器和整个网络的时间对于这些数据量来说似乎有点慢。当然,这还取决于对数据执行什么处理,以及是同步还是异步执行。例如,在一行中发送多个请求时的速度减慢可以通过异步处理数据来解释。如果将数据从请求中提取出来并放入队列中进行“处理”,然后立即发送响应,则响应速度可能相对较快。如果在返回前处理队列时必须阻止后续请求,这可能解释了速度减慢的原因。但我只是在猜测这一点

网络上的请求速度显然取决于物理距离、跳数等,但这些数字似乎表明它通常比应该的慢。最可能的原因是代码中的逻辑不正确。。。但是如果没有更多的信息,猜测原因就不容易了(至少对我来说是这样)

出于好奇,我刚刚运行了一些快速测试,通过本地机器上的套接字发送消息,每个请求都是10K(响应包小得多)。平均往返时间仅为0.22毫秒。对网络上两跳之外的服务器进行的类似测试平均每次往返时间为1.9毫秒。这是使用TCP/IP。使用UDP连接到两跳之外的服务器,平均时间为1.7毫秒

因此,您看到的速度似乎相当慢(但我的测试的硬件和网络速度可能与您的设置没有任何共同之处……因此这些数字对您来说只是略微有用)


不过,更具价值的是,您可以使用
ping
来获得预期需要多长时间的基线。您可以指定ping的数据包大小(-s选项或可能-l,具体取决于您使用的版本)。通过ping我在另一个测试中运行的同两台机器,验证了时间的合理性。

如果您可以发布一些代码,这会有所帮助。在我看来,代码不太正确,因此性能不如预期。我的代码发布在。它可以工作,但性能不好。如果您可以发布一些代码,这会有所帮助。在我看来,代码不太正确,因此它的性能没有达到预期的水平。我的代码