0

我试图了解本地套接字(Unix 域套接字)是如何工作的,特别是如何将它们与 QT 一起使用。据我了解,Unix 域套接字始终可靠且不会丢失任何数据。查看这些示例,这些是步骤(使其变得简单),考虑到服务器(生产者)和客户端(消费者)..

  1. qLocalServer(在服务器上)创建一个套接字,将其绑定到已知位置并监听传入连接。
  2. 一个 qLocalSocket(在客户端)连接到已知位置。在服务器上连接被接受。
  3. write服务器可以使用方法(qLocalSocket返回的实例的qLocalServer->nextPendingConnection())向套接字发送数据

当套接字缓冲区已满时,一旦客户端从套接字读取并释放套接字缓冲区,服务器的任何写入都会被阻止。这是我不明白的部分:假设套接字缓冲区已满并且服务器一直在写入..所有这些数据都存储在哪里以及如何控制保存这些数据的数据结构?有没有办法丢弃这些数据?想象一个服务器以 20 次/秒的速度产生数据,而一个客户端以 1 次/秒的速度消耗数据,我想删除中间的所有数据(比我的用例中的所有数据更好的实时数据)。

4

1 回答 1

0

Qt 套接字类没有什么独特之处(出于这个问题的目的)。

当套接字缓冲区已满时,一旦客户端从套接字读取并释放套接字缓冲区,服务器的任何写入都会被阻止。

否 - 写入被阻止,直到客户端执行读取,释放一些缓冲区。(也许这就是你的意思,我们只是有一点语言障碍。)

一旦服务器写入套接字,数据就不能“未写入”,因此如何最好地处理这取决于您的应用程序,以及您是否对服务器或客户端的编程有更多控制权。

于 2022-01-19T20:05:28.753 回答