0

boost::asio を使用して独自の非同期ネットワーク クライアントを作成しようとしています。利用可能な例で私が観察していることの 1 つは、単一の io_service、リゾルバー、およびクエリ オブジェクトを作成するか、作成しているすべての接続に対してこれらのオブジェクトの新しいインスタンスを作成するかについて明確でないことです。

特定のサーバー(一意のIPとホスト)にのみ接続するクライアントがありますが、これを1日に数100回行います。

私は独自のネットワーク クラスを持つことを計画しており、クラス自体には、オブジェクトの構築時に io_service、resolver、query、socket 変数がすべて設定されています。

myclient::myclient() : io_service_(), resolver_(io_service_),
  query_(tcp::v4(), host_, port_), socket_(io_service_) 
{
}

//...

resolver.async_resolve_();
io_service_.reset();
io_service_.run_one();

これは大丈夫に見えますか?

4

1 に答える 1

1

上記で説明したプロセスの io_service を 1 つに制限する必要があります。io_service クラスはスレッドセーフであるため、多くのスレッドで一度に使用して作業をディスパッチできます。下部にいくつかの使用例があるio_serviceクラスのドキュメントを簡単に読んでください。

また、チャット クライアントの例を見て、io_service がメイン関数で作成され、chat_client クラスへの参照によって渡される方法に注意してください。

于 2012-05-01T13:03:08.227 に答える