我有两台电脑通过1Gbps直连以太网线连接。其中一台作为TCP服务器,另一台作为TCP客户端。现在我想在这两台电脑之间实现最大可能的网络吞吐量。
我尝试了以下选项: 在PC-1上创建多个使用不同端口号的客户端,连接到TCP服务器。创建多个客户端的原因是为了增加网络吞吐量,但是我在这里遇到了一个问题。 我有一个事件缓冲队列需要发送到服务器。其中会有多个具有相同事件编号的消息。服务器必须获取所有消息,然后根据事件编号对消息进行排序。每个客户端现在从并发队列中出队消息并发送到服务器。发送完毕后,客户端再次重复相同的过程。我已经在客户端上设置了约束条件,即在发送带有事件1标签的所有消息之前,不会发送事件2。因此,我看到发送的事件顺序是正确的。TCP服务器不断从所有客户端接收。
现在让我们来看看问题:服务器以稍微随机的方式接收数据,如图所示。在一段时间后,两个连续事件之间的随机性变得更加严重。我认为这种随机行为是由于并行工作线程执行IO完成回调引起的。
使用的技术:F#套接字异步和SocketEventArgs。
我尝试的解决方案是:不是允许在服务器端从所有客户端接收,而是尝试轮询具有挂起数据的下一个可用客户端,然后可以确保正确的顺序,但其性能根本无法与以前的方法相比。 我希望能够按照客户端发送的顺序(或者近似顺序,但不包括非确定性随机)接收数据。有没有办法既保留顺序又提高吞吐量?如何实现在两台电脑之间实现接近100%的网络吞吐量?
我尝试了以下选项: 在PC-1上创建多个使用不同端口号的客户端,连接到TCP服务器。创建多个客户端的原因是为了增加网络吞吐量,但是我在这里遇到了一个问题。 我有一个事件缓冲队列需要发送到服务器。其中会有多个具有相同事件编号的消息。服务器必须获取所有消息,然后根据事件编号对消息进行排序。每个客户端现在从并发队列中出队消息并发送到服务器。发送完毕后,客户端再次重复相同的过程。我已经在客户端上设置了约束条件,即在发送带有事件1标签的所有消息之前,不会发送事件2。因此,我看到发送的事件顺序是正确的。TCP服务器不断从所有客户端接收。
现在让我们来看看问题:服务器以稍微随机的方式接收数据,如图所示。在一段时间后,两个连续事件之间的随机性变得更加严重。我认为这种随机行为是由于并行工作线程执行IO完成回调引起的。
使用的技术:F#套接字异步和SocketEventArgs。
我尝试的解决方案是:不是允许在服务器端从所有客户端接收,而是尝试轮询具有挂起数据的下一个可用客户端,然后可以确保正确的顺序,但其性能根本无法与以前的方法相比。 我希望能够按照客户端发送的顺序(或者近似顺序,但不包括非确定性随机)接收数据。有没有办法既保留顺序又提高吞吐量?如何实现在两台电脑之间实现接近100%的网络吞吐量?