gpt4 book ai didi

c++ - 客户端-服务器设计

转载 作者:行者123 更新时间:2023-11-28 03:58:47 27 4
gpt4 key购买 nike

我想开发一个非常基本的客户端-服务器程序。

一个软件读取 xml(或任何数据)并将其发送到服务器,服务器反过来对其进行一些操作并最终将其写入磁盘。

问题是如果我的磁盘上有很多 xml 文件(在我的客户端),我想打开到服务器的多个连接,而不是一个一个地点。

我的第一个问题是:假设我有一个线程保留所有文件句柄并在它们上面等待多个对象,所以它会知道其中一个何时准备好从磁盘读取。对于每个文件,我都有一个合适的套接字,可以将该特定文件发送到服务器。对于套接字,我可以使用选择功能来了解哪些套接字已准备好发送。但是有没有办法知道文件和适当的套接字都已准备好发送?

其次,有没有一种更有效的客户端设计方法,因为我目前的设计只使用一个线程,这在多处理器计算机上效率不够高。(尽管我确信为每个套接字连接启动新线程会更好)

第三,对于服务器,我阅读了 react 器模式。这似乎是合适的,但仍然像我的第二个问题一样,在使用一个线程时似乎不够有效。

也许我可以使用带有完成端口的东西?认为它们非常有效但从未真正使用过它们,所以不知 Prop 体如何。

任何答案和一般性建议都很好。

最佳答案

看看boost::asio它使用 proactor 模式(请参阅文档),该模式基本上使用操作系统等待操作(waitforsingle/multiple、select、epoll 等...)来非常有效地使用系统中的单个线程,就像您正在考虑实现的那样.

asio 可以读/写文件和套接字。您可以使用 asio 对文件进行异步读取,它会在完成时调用您的回调,然后您将该读取缓冲区作为异步写入提交到套接字。当套接字完成每个挂起的写入操作时,Asio 将负责交付所有异步写入缓冲区。

这些操作中的每一个都是异步完成的,因此线程实际上只忙于启动读取或写入,其余时间处于空闲状态。

关于c++ - 客户端-服务器设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1959581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com