没有多线程的c++套接字不同步/并行代码
C++ Sockets Unsynched/Parallel Code without Multithreading
我用c++编写了这个2-side(客户端和服务器端)程序,这基本上是一个"聊天程序"。
一方向另一方发送数据,另一方向另一方发送数据。我正在使用C-Sockets (TCP/SOCK_STREAM)。
所以我的问题是,虽然服务器正在等待数据("recv()")它本身无法发送数据,因为recv队列是无限的,就我的经验所示。
我已经想到了两种方法来解决这个问题,但我不确定是否值得花时间。因为也许有一个简单的解决办法,只是我太笨了,想不出来。- 使它成为一个六面连接,这意味着我有一个"物理服务器",我的服务器在四个实例中运行,每个客户端两次(发送和接收)。因此,如果一个服务器接收到数据,它将数据存储在文件中,供另一个客户端的发送服务器读取和…发送它。反过来也是一样的。
由于这个解决方案听起来相当糟糕,我可能不会采用它。
- 使用多线程。我听说这是纯抗癌药物,除非万不得已,否则你不应该使用它。
所以我的问题是,我必须这样做吗?或者有一个简单的解决办法?
阻塞套接字上的recv()用于当您需要等待传入的数据并且在数据到达之前无事可做时。如果不是您的情况,您可以使用非阻塞套接字,或者选择timeout。select
将更简单,只需检查是否有任何东西定期到达您的套接字(例如在循环中),并在两者之间做您想做的事情。
顺便说一下,它被称为"BSD套接字",而不是"C套接字",这可以帮助你搜索。
相关文章:
- C++17中的并行执行策略
- 松弛原子与无同步情况下的记忆连贯性
- 并行用于C++17中数组索引范围内的循环
- 如何在Elixir中调用递归函数并行
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 遍历并行数组以确定C++中的最大数字
- 在C++中同步线程
- 与 stdio 同步是否使程序 I/O 非交互式?
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 并行标准::复制复杂性
- 如何在qt中同步应用程序和显示器的刷新率?
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 管道中的任务并行化和数据同步
- 原生C++中的并行同步迭代任务
- 没有多线程的c++套接字不同步/并行代码