性能通过 TCP 套接字客户端-服务器应用程序发送/接收数据

Posted

技术标签:

【中文标题】性能通过 TCP 套接字客户端-服务器应用程序发送/接收数据【英文标题】:Performance send / receive data via TCP socket Client-Server application 【发布时间】:2012-11-28 14:53:02 【问题描述】:

我正在开发一个系统,用于通过 TCP 使用套接字在客户端和服务器应用程序之间交换数据。

服务器是很久以前在C++ 中编写的(由第三方编写),而客户端是我仍在C# 中开发的应用程序。基地已经建成。两个应用程序都可以正常通信。问题是数据交换(在我看来)太慢了。

我强调在我看来,因为我不知道您可以通过 TCP 使用套接字实际期待什么。目前,目测,经过多次测试,接收和发送的通信速度平均为每秒 200/250 KB。

是否有应用程序可以让您评估特定端口上两个端点之间的数据交换速度? 我应该期待什么速度?

更具体地说,客户端和服务器是为文件共享而开发的。目前,客户端一次只能接收和发送一个文件。该协议会以其他方式执行(一次接收/发送多个文件),但出于安全原因,我更喜欢其他方式(如果您收到多个文件并且您失去连接,您将丢失您收到的所有文件)。

更改此功能会显着影响数据交换速度吗?以什么方式?

【问题讨论】:

您的测试运行情况如何?当地的?内网?偏僻的?你的链接速度是多少(你测试过吗?)?请记住,上传速度通常比下载速度慢。您的服务器中还运行着什么?您可以使用另一个客户端测试应用程序吗?只是说它似乎更慢并没有多大帮助...... @ArthurNunes 1) 远程。 2)正如我所写的,我不知道如何测试它,我可以看到如果我的客户收到一个 1MB 的文件大约需要 4/5 秒。 3)什么都没有,服务器只连接到我的客户端,什么都不做。 4)我可以尝试恢复用C++编写的旧客户端(但如果我不能呢?)。 【参考方案1】:

首先,您必须知道主机为您提供的链接的带宽才能知道会发生什么。如果您自己托管,your upload speed may be way slower than the download speed link。您可以登录到您的服务器并运行speed test。

我遇到了和你类似的情况(开发了一个服务器和一个客户端来向它发送二进制数据),到那时(2-3 年前)我使用了this tool 的一个版本来测量数据的速度交换。您可以将它安装在您的服务器上,设置监视器(您要监视的端口等),配置图表并让它运行一段时间。它工作得非常好。您可以寻找其他类似的工具搜索“带宽流量监视器”。

如果您允许您的应用程序同时交换多个文件,请记住您的链接速度将在连接之间进行分配,并且根据使用您的应用程序的客户端数量,多个连接和文件会写入您的服务器除了带宽之外,将做的事情可能会受到其处理能力的限制。

【讨论】:

【参考方案2】:

我应该期待什么速度?

两个节点之间的网络最慢部分可以传输的全速,减去该最慢部分上现有流量的带宽。在 100 Mbit LAN 上,我预计单向传输速度为 10 MB/s。

更改此功能会显着影响数据交换的速度吗?以什么方式?

这完全取决于所使用的协议以及客户端和服务器的实现。您必须对正在完成艰苦工作的地方进行基准测试,您的瓶颈在哪里。

【讨论】:

@Nick 您的服务器和客户端是否通过同一连接进行通信? 1 Mbps 大约是 100 KBps,不到您报告的速度的一半。

以上是关于性能通过 TCP 套接字客户端-服务器应用程序发送/接收数据的主要内容,如果未能解决你的问题,请参考以下文章

服务器/客户端未发送所有字节(TCP 套接字)

无法通过 TCP 套接字发送大列表 - 黑莓

在 Raspberry Pi 中使用 OpenCV 和套接字通过 TCP 发送视频

在 TCP 套接字程序中,客户端发送一些数据,但服务器需要多次读取。为啥?

通过 TCP 套接字进行 i/o 调用的问题

在 C++ 中通过 tcp 套接字发送结构