我正在设计和测试一个基于TCP套接字(Internet域)的客户端服务器程序。目前,我正在本地机器上进行测试,但是对SIGPIPE以下内容无法理解。
*. SIGPIPE出现的时机很随机。它是否可以是确定性的?
最初的测试包括从客户端发送单个小型(25个字符)操作,并在服务器上进行相应的接收。同样的代码,在同一台机器上运行成功或不成功(SIGPIPE),完全不受我的控制。失败率约为45%(非常高)。因此,我是否可以通过某种方式调整机器以将其最小化。
**. 第二轮测试是从客户端向服务器发送40000个小型(25个字符)消息(总共1MB的数据),然后服务器响应其实际接收到的数据总大小。客户端在紧密循环中发送数据,并且服务器只有一个接收调用。它仅适用于发送的总数据量最大为1200字节,并且现在存在这些非确定性的SIGPIPE,约占70%(真的很糟糕)。
有人能建议一些改进我的设计吗(可能会在服务器上)。要求是客户端在与服务器建立单个套接字连接后能够发送中到非常高量的数据(每个消息约25个字符)。我有一种感觉,针对单个接收的多个发送将始终有丢失和非常低效的情况。我们应该将消息组合并在一个send()操作中发送。这是唯一的方法吗?