C++ Boost Asio TCP服务器处理多个客户端

C++ Boost Asio TCP服务器处理多个客户端,c++,boost-asio,C++,Boost Asio,我不熟悉网络编程和Boost Asio库的使用 通过修改Boost Asio“阻塞TCP回送服务器和客户端”,我成功地实现了一项满足我需求的任务,该Asio在我的客户端和服务器之间执行操作事务 现在,我需要将多个客户端连接到服务器 我发现一些相关链接建议在服务器端使用async\u accept 因此,我尝试运行Boost Asio示例:“异步TCP Echo服务器”和“阻塞TCP Echo客户端”,其中服务器区分不同的客户端并相应地寻址它们 但是,我的实际需求应该是,不是服务器完成一个客户机的

我不熟悉网络编程和Boost Asio库的使用

通过修改Boost Asio“阻塞TCP回送服务器和客户端”,我成功地实现了一项满足我需求的任务,该Asio在我的客户端和服务器之间执行操作事务

现在,我需要将多个客户端连接到服务器

我发现一些相关链接建议在服务器端使用
async\u accept

因此,我尝试运行Boost Asio示例:“异步TCP Echo服务器”和“阻塞TCP Echo客户端”,其中服务器区分不同的客户端并相应地寻址它们

但是,我的实际需求应该是,不是服务器完成一个客户机的整个过程,而是它[服务器]必须对第一个客户机执行相同的操作,然后转到第二个客户机执行这些操作,然后再次返回第一个客户机并按此顺序继续,直到所有操作完成

是否有任何方法或想法可以帮助我使用Boost Asio执行此流程?另外,我正在使用“阻塞TCP Echo客户端”,它只有一个正常的
connect()
,而没有一个
async\u connect()
,这是一个问题吗

此外,是否可以使用Boost Asio通过服务器在多个客户端之间进行通信


提前非常感谢

有两种模型可在服务器上同时处理多个客户端

一种是为每个客户机生成一个新线程,然后每个线程同步处理每个客户机。第二种模型是在单个线程上使用异步API,所有这些线程都在单个服务上运行。接受完成后,您将创建一个新的工作线程,并启动协议所需的发送和接收工作线程。主线程返回接受新连接

使用async,您可以使用async accept启动泵,并运行调用io_服务。当accept完成时,回调将运行。现在,您可以为新创建的客户机使用进一步的accepts(对于更多客户机)start async send和recv再次启动泵。因为所有的发送和接收都是非阻塞的,所以线程睡眠的唯一时间是它无所事事的时候。否则io_服务运行方法会为您处理所有事情


如果您通过阻止发送和接收,则不能同时处理多个客户端。

您能提供一些迄今为止尝试过的代码吗?是的,我将添加代码Hi,Bjoern Urban,我已经使用阻止TCP回送概念实现了客户端和服务器之间的通信。现在,我希望服务器处理多个客户端,其中一个客户端一次不完成整个操作,而是使用服务器完成部分操作,下一个等待的客户端继续其余操作。我希望操作与客户端交错。“它[服务器]必须对第一个客户端执行相同的操作,然后转到第二个客户端并执行这些操作,然后再次返回第一个客户端并按此顺序继续,直到所有操作完成”-此位完全不清楚。我们不知道“此订单”是什么意思,“返回”、“再次”或“操作”是什么。您好,服务器将数据发送到第一个客户端,并等待第一个客户端确认,然后将数据发送到第二个客户端并等待,直到它确认之后,服务器将再次请求第一个客户端返回发送的数据,并类似地请求第二个客户端返回数据。我只是在这里使用阻塞TCP Echo服务器和客户端来编写代码。我不确定到底可以做什么样的修改!在这里,客户端不会失去与服务器的连接,它们会在服务器完成另一个客户端的请求后再次被调用。因此,我计划将我的阻塞TCP Echo服务器代码表单修改为Spawn Server格式,包括我的逻辑,我希望在这种情况下可以解决运行多个客户端的问题。但是,我不确定如何在执行部分服务器逻辑时在客户端之间实现前面提到的等待操作?这是我最大的怀疑!