使用するCのネットワークライブラリ():複数のスレッドを使用してlibuvインストール、マルチスレッドクライアントのTCP、TCPサーバ

参考サイト:https://github.com/libuv/libuv/blob/master/README.md

https://www.cnblogs.com/cnxkey/articles/10058702.html

、libuvインストール

1、Windowsがインストールされ(ここでvs2017は、コンパイル)

  1. ダウンロードlibuv:https://github.com/libuv/libuv

  2. ダウンロードGYP(https://github.com/turbulenz/gyplibuv /ビルドした後、減圧下に置か

  3. GYPのインストールがPython環境を必要とし、ダウンロードPython2.x(https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi)のインストールと設定環境変数

  4. インストールGYP:実行中のlibuv /ビルド/ GPYを入力CMD:setup.py installを

  5. ここでは、32ビットのデバッグバージョンをコンパイルするオープンvs2017コンパイラツール(スタート - > vs2017-> x86のツールを、管理者権限で実行する権利)

  6. libuvインストール:vcbuildのvs2017を実行するプロジェクトディレクトリに切り替え

  7. 終了したら、建設中のデバッグ/ libには、.LIBライブラリーを生成します、それは使用にエンジニアリングと.LIBライブラリが含まれるコピー

図2は、Linuxで搭載しました

  1. ダウンロードlibuv:https://github.com/libuv/libuv

  2. 抽出タール-zxvf libuv-v1.32.0.tar.gz

  3. libtoolのライブラリの欠如は、インストールしてください場合はyumのlibtoolをインストール

  4.  SH autogen.sh   

  5. 。/構成、設定 

  6. メイク 

  7. メイクチェック(エラー無視)

  8. make installを

  9. ソフトリンクのln -s /usr/local/lib/libuv.so.1 /usr/lib64/libuv.so.1を作成します。

二、libuvの使用

1)、ウィンドウを使用して

新しいプロジェクトを作成しますvs2017 1

2、.LIBライブラリのライブラリディレクトリを追加libuvをlibuvのヘッダファイルを含むディレクトリを追加

3、競合追加の依存は、ライブラリ、ライブラリlibに必要な項目を追加LIBCMTDを無視引き起こしました

追加の依存:

libuv.lib
WS2_32.LIB
iphlpapi.lib
Userenv.lib
Psapi.lib

LIBCMTD:特定のデフォルトのライブラリを無視

4、あなたはプロジェクトをコンパイルすることができます

2)以下linxuを使用して

1、それがg ++ TEST.CPP -luv実行することができます

 

二つは、libuvは、TCPクライアントとサーバーのプログラミングをマルチスレッド

URLコードを参照してもよいします。https://github.com/wangdamingll/libuv.git

Vs2017コードが書かれ、コンパイラエラー場合は、ファイルのヘッダ自体でのLinuxプラットフォームの違いを削除してください

これは、使用vs2017ヘッダファイルで削除する#include「pch.h」、でなければなりません

1、マルチスレッドクライアントのTCP

上記URL LibuvClient.cppファイルを参照してください。

2、マルチスレッドTCPサーバ

上記URL LibuvServer.cppファイルを参照してください。

三、libuvはTCPクライアント/サーバーの思考をマルチスレッド

図1は、シングルスレッド例libuv公式非同期I / O与えられ、一般的に通常の使用のために十分でなければならない、唯一の基準を提供するために本明細書で提供されるマルチスレッド

タスクは、スレッドプールの内側にプッシュするが、サーバがTCP TCPデータであるため、上述した実施形態は、連続データを有するの結果かもしれないもはやTCPであるした後、サーバが受け入れる場合uv_queue_work()を提供2、libuv連続性は、順不同でパケットが得られ、また考えて個人的に取ることができない通常の走行俵を調整するための追加のロジックを追加する必要があります

3、私は公式サイト、機能libuvを参照してください、だけuv_async_send()関数はスレッドセーフですが、次のコード(アドレス上記のコード上のサーバー):

兄のアドバイスを理解したいと考えて、それはスレッドセーフではありませんが、私はそれをテストしていません

4、マルチスレッドの欠点は、髪の問題は、非同期I / Oを使用uv_async_sendすることができ、シングルスレッドどのようにメッセージを送信している()コールバックがトリガされた後、送信されていますが、労働者とマルチスレッドlibuvの間でマルチマルチスレッドパイプラインを確立する必要がありますされ、パイプラインがイベントを読み込み、指定されたスレッドが送信するすべてのlibuv配管ねじまたはトリガのパイプラインへのワーカースレッドでデータのバイトを書き込むことによって、libuvイベント登録サイクルに読んで、私はLinux上でのパイプラインの事件をテストしている、実行することができます。Windows上で自分自身を追加します。また、libuvパイプラインのIPCメカニズムの使用は、達成することができるはず、ここではそれらを繰り返しません

公開された155元の記事 ウォン称賛15 ビュー160 000 +

おすすめ

転載: blog.csdn.net/wangdamingll/article/details/101619464