如何正确使用boost :: asio? (TCP服务器)

时间:2012-03-17 20:09:39

标签: c++ multithreading boost tcp boost-asio

我目前正在尝试创建一个服务器程序,它响应来自多个客户端的SSL加密TCP数据包。

我已经尝试用多线程套接字来实现这一点(还没有提升,我只是为每个新客户端创建了一个新线程)但是因为我对线程(尤其是资源共享部分)缺乏经验,所以它不起作用好。 当程序从至少两个不同的客户端收到数据包时,问题就开始了 在大约相同的时间。

所以我决定寻找某种能为我做套接字的API(我的意思是为什么要重新发明一切?)我偶然发现了boost :: asio。 它听起来很有希望,因为它有SSL支持,并且与所有这些线程相比,它被认为是非常有效的。

但是我现在有些困难要理解整个事情应该如何运作。或者更好地说,我不确定如何在我已经运行的代码中实现它。

以下是目前的工作原理:

  • 服务器在两个不同的端口上侦听任何传入的数据包,所以我做了两个线程,我检查是否有任何客户端正在连接/发送东西(如果它们已经连接并发送一些东西,那么它发生在子线程中)< / p>

  • 我使用accept检查新客户端并返回套接字,以便我知道在哪里回复

  • 然后一旦数据包进入,我首先使用SSL_read(...)读取标头(因为它的SSL已加密)以确定数据包大小,然后再次使用SSL_read将数据保存在缓冲区中并返回数据

  • 一旦完成,我会读取数据并根据其中的内容执行某些操作,然后创建一个新的数据包,我使用SSL_write将包发送到客户端

但是我也在子线程中保存了每个连接客户端的一些“个人内容”,我检查传入的数据包,每当我将数据包发送回相应的客户端时,我都需要能够访问它们(这就是套接字的原因)在整个对话过程中也需要保持一致,直到客户端断开连接。)

现在我不确定如何用boost :: asio来实现这个目标(或者甚至可以实现)。我已经完成了一些例子,但是从中得不到多少。

所以我非常感谢,如果有人可以给我一个关于如何实现这一事情的简短描述,就像我之前做的那样,提前感谢。

0 个答案:

没有答案