目次
Poco::TCPServer フレームワークについて (Windows で使用されるモデルを選択) 勉強メモ。、pocotcpserver
手順
TCPServerが支配するプロセスをもう一度見てみましょう
ホームページ バックエンド開発 PHPチュートリアル Poco::TCPServer フレームワーク (Windows で使用されるモデルを選択) についての学習メモ、pocotcpserver_PHP チュートリアル

Poco::TCPServer フレームワーク (Windows で使用されるモデルを選択) についての学習メモ、pocotcpserver_PHP チュートリアル

Jul 13, 2016 am 10:01 AM
poco

Poco::TCPServer フレームワークについて (Windows で使用されるモデルを選択) 勉強メモ。、pocotcpserver

手順

なぜこの記事を書いているのですか? Ah Er の Dream Boat の http://www.cppblog.com/richbirdandy/archive/2010/09/10/123994.html を読んだのです。

残念ながらコードが多すぎて面倒に見えるので、今後自分が使いやすいようにフローチャートで簡略化します。 この記事の内容はWindow API分析に基づいています。

この記事の poco はバージョン 1.4.6p4 (2014-04-18) です

poco のバージョンは 1.6 になりましたが、呼び出しはあまり変わっていません。

pocoダウンロードアドレス: http://pocoproject.org/releases/

この記事では、分析のエントリ ポイントとして TimeServer.cpp を使用します。

始める前に知っておくべきこと:

1,Inlineインライン関数: を参照してください:

http://blog.sina.com.cn/s/blog_90e888f50100zgo2.html

主に実行効率の向上のため。

2、クラスメンバー関数のオーバーロード、書き換え、非表示

参考:

dazhong159さんの<クラスメンバー関数のオーバーロード、書き換え、オーバーライドの違い>

http://blog.csdn.net/dazhong159/article/details/7844369

コード内で広範囲に使用、書き換え、隠蔽されています。

3、モデル選択の原則:

引用

6 つのソケット I/O モデルのユーモアを交えた説明

http://blog.csdn.net/normalnotebook/article/details/999840

内容:

for i:=0 to fd_read.fd_count-1 do //注意、fd_count それは同期操作です。

ラオ・チェンは娘の手紙が見たがっています。娘からの手紙があるかどうかを確認するために、10分ごとに階下の郵便受けをチェックするほどです~~~~~

この場合、「郵便受けをチェックするために階下に行って」、それから二階に戻ると、チェンさんは非常に遅れてしまい、他の仕事ができなくなってしまった。

選択モデルは Lao Chen の状況と非常によく似ています。何度も確認して...データがある場合...受信/送信...



リーリー
したがって、選択モデルは一般的な小規模接続にのみ使用できます。高い同時実行性は受け入れられません。

4、

コンストラクターの初期化シーケンスの理解

C++ コンストラクターは次の順序で呼び出されます:

(1) 仮想基本クラスのコンストラクターは、継承された順序で構築されます

。 (2) 非仮想基本クラスのコンストラクターは、継承された順序で構築されます。 (3) メンバー オブジェクトのコンストラクターは、宣言された順序で呼び出されます。

(4) クラス独自のコンストラクター。



5、FastMutexミューテックス変数について

bool NoticeQueue::empty() const

{

FastMutex::ScopedLock lock(_mutex);

return _nfQueue.empty();

}

empty() が実行された後、~FastMutex::ScopedLock デストラクターを呼び出して解放します。

ウィンドウの下で使用される重要なセクション:

class Foundation_API MutexImpl

{

protected:

MutexImpl();

~MutexImpl();
void lockImpl();
bool tryLockImpl();
bool tryLockImpl(long ミリ秒);
voidunlockImpl();

private:

CRITICAL_SECTION _cs;//クリティカルセクション

};
Windows環境で使用されるクリティカルセクションを確認できます。

6、スレッドについて:

窓の下で使用します

_thread = (HANDLE) _beginthreadex(NULL, _stackSize, ent, this, 0, &threadId);

スレッド操作を実行します。

7. イベントの待機と接続リクエストの同期が使用されます

WaitForSingleObject(

これも私のお気に入り

)

SetEvent ()、ResetEvent() を通じてリセットをアクティブ化します。

8、static_cast<>dynamic_castの使用法。

以下を参照してください:

http://www.cnblogs.com/bastard/archive/2011/12/14/2288117.html

http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html

コードの例:

void* pThread;

reinterpret_cast(pThread)->pRunnableTarget->run();

//reinterpret_cas この変換は最も「安全ではない」ものです。たとえば、この変換を使用して 2 つの無関係なクラス ポインター間の変換を行うことができます。

_threadId = static_cast(threadId);

//static_castは基本的なデータ型変換(char、int)とポインタ間の変換に使用されます

9、スマート(スマート)ポインタauto_ptrについて

auto_ptr 簡単に言うと、(例外があるかどうかに関係なく) 作成されたリソースを終了時に解放できるようにします

std::auto_ptr pConnection(_pConnectionFactory->createConnection(pCNf->socket()));

AutoPtr<通知> pNf = _queue.waitDequeueNotification(idleTime);

内で直接見つけることができます

template
class auto_ptr
{ // 確実に破棄するためにオブジェクト ポインタをラップします

以下を参照できます:

より効果的な C++ 中国語版.pdf 7.4 アイテム M28: スマート ポインターの章 (baidu で検索してダウンロード)

http://blog.chinaunix.net/uid-9525959-id-2001803.html

のスニペット:

auto_ptr 使用の落とし穴を回避する方法

auto_ptr は確かに便利ではありますが、欠点もあるので、使用する際には注意が必要です。 まず第一に、auto_ptr オブジェクトを STL コンテナの要素として使用しないでください。 C++ 標準ではこれを明示的に禁止しています。そうしないと、予期しない結果が発生する可能性があります。
auto_ptr のもう 1 つの欠陥は、配列を auto_ptr のパラメータとして使用することです:
auto_ptr pstr (new char[12] ) //Array; を使用するときは必ず覚えておいてください。操作中に、配列を破棄するには delete[] を使用する必要があります。 auto_ptr のデストラクターは非配列型でのみ機能するためです。したがって、配列を正しく破棄できない場合、プログラムの動作は不明確になります。つまり、auto_ptr は new によって割り当てられた単一のオブジェクト ポインターを制御するだけで、それ以上は制御しません。
ただし、この問題は C++ 11 標準で解決されています。

unique_ptr

独自のオブジェクト所有権セマンティクスを備えたスマート ポインター

STL コンテナーで使用できるオーナー ポインターは 1 つだけです

shared_ptr

オブジェクト所有権の共有セマンティクスを備えたスマート ポインター

共有可能なポインター

weak_ptr

std::shared_ptr によって管理されるオブジェクトへの弱い参照

弱参照ポインタ

auto_ptr

厳密なオブジェクト所有権セマンティクスを備えたスマート ポインター

所有者ポインターは 1 つだけ存在でき、STL コンテナーでは使用できません

遠くまで行ってしまったので、さらに深く進みたいです (あまり考えすぎないでください -_-)、baidu をお願いします...

上記を読んで、あらゆる知識が集約されていることがわかりました

したがって、私たちは依然としてオープンソースコードを調べる必要があります。以前は、会社はオープンソースを使用していませんでした...うーん...スタート

クラス間の関係は主にコード内で使用されます

画像が広すぎて表示できません(新しいタブで画像を開いてください。よろしくお願いします。)

メインカテゴリ:

1、TCPServer メイン サービス。選択モデルを呼び出して接続メッセージの変更を処理します。

2. PooledThread はスレッド プールであり、アクティブ化されると、TCPServerDispatcher::run() が呼び出され、パッケージの受信後に特定のリクエストが処理されます。

TimeServerConnection.run()

TimeServerConnection.run() はプログラマ定義の関数を実装するためにサブクラスによって隠蔽されています。

3、TCPServerDispatcher、ディスパッチマネージャー (ここではそう呼ぶことにします) メッセージの変更を受信し、キューに入れ、接続数を管理します。

キューに追加されると、PooledThread 内のイベントがアクティブ化されます。

PooledThread は次に TCPServerDispatcher::run() をアクティブ化します [条件が許せば、相互アクティブ化と呼びましょう]

4、TCPServerConnection。特定の動作を実装するには、サブクラスの run() を継承して実装関数をカスタマイズします。 5、TCPServerConnectionFactory は TCPServerConnection の作成と管理を担当します。

6. TCPServerParams のパラメータ管理については説明しません。

7,NotificationQueue は、管理のために接続をキューに入れます。

主要カテゴリの紹介を読んだ後は、他のプロセスについても一般的に理解できるはずです。

フローチャート:

写真が長すぎるので

画像が広すぎて表示できません(新しいタブで画像を開いてください。よろしくお願いします。)

まずはPooledThreadのプロセスを見てみましょう

TCPServerが支配するプロセスをもう一度見てみましょう

画像が広すぎて表示できません(画像を新しいタブで開いてください。ありがとうございます。)


Windows での select のパフォーマンスは実際にはあまり良くなく、Linux バージョンでは epoll が使用されます。

epoll は select よりも効率的です。 http://blog.csdn.net/legion8169/article/details/1637154 を参照してください。

但poco tcpserver 中是有线程池操作的,所以说来效率不会太低.

 

 

 

先到这儿,还没有写完.

我们可以改变什么:

    ThreadPool(<span>int</span> minCapacity = <span>2</span><span>,
        </span><span>int</span> maxCapacity = <span>16</span><span>,
        </span><span>int</span> idleTime = <span>60</span><span>,
        </span><span>int</span> stackSize =<span> POCO_THREAD_STACK_SIZE);
        </span><span>///</span><span> Creates a thread pool with minCapacity threads.
        </span><span>///</span><span> If required, up to maxCapacity threads are created
        </span><span>///</span><span> a NoThreadAvailableException exception is thrown.
        </span><span>///</span><span> If a thread is running idle for more than idleTime seconds,
        </span><span>///</span><span> and more than minCapacity threads are running, the thread
        </span><span>///</span><span> is killed. Threads are created with given stack size.</span>
ログイン後にコピー

增加线程池中线程数(费话!),来加快select 中处理.

在中等程序中,增加  TCPSelect Manage进程,  来负责与多个  TcpServer 的进程通信.

即再增加一个管理者(中间键,或activemq之类),来加强并发能力,

或者直接使用linux 环境 ,即用了epoll 来实现高效性.

 

个人愚见,可能有些没写明白.还望高手指点.

谢谢.

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/971772.htmlTechArticle关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记.,pocotcpserver 说明 为何要写这篇文章 ,之前看过阿二的梦想船的Poco::TCPServer框...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xiaomi POCO F7 Proの初期の目撃情報でRedmi K80との関連が明らかに Xiaomi POCO F7 Proの初期の目撃情報でRedmi K80との関連が明らかに Jul 31, 2024 am 08:48 AM

POCO F6 Pro (Amazon で現在 512.50 ドル) は 5 月 23 日に発表され、発売されてからそれほど時間が経っていません。それにもかかわらず、Gizmochina はすでに後継機の早期発見を発見しました。よくあることですが、このウェブサイトでは、

Xiaomi POCO F7は、グローバルおよびインド専用のリリースを受けることが明らかになりました Xiaomi POCO F7は、グローバルおよびインド専用のリリースを受けることが明らかになりました Aug 08, 2024 pm 09:31 PM

Xiaomiは、今年後半に登場する可能性のあるさらに多くのRedmiおよびPOCOスマートフォンを準備しているようです。最近、同社が世界中の視聴者向けにPOCO F7 Proを開発しており、中国ではRedmi K8として提供される予定であるという証拠が明らかになった。

8月1日にリリース、Xiaomi POCO M6 Plus 5G携帯電話とPOCO Buds X1ヘッドフォンの物理写真が公開 8月1日にリリース、Xiaomi POCO M6 Plus 5G携帯電話とPOCO Buds X1ヘッドフォンの物理写真が公開 Jul 30, 2024 pm 02:29 PM

7月30日のニュースによると、情報筋のYogesh Brar氏は昨日(7月29日)、Xプラットフォームにツイートを投稿し、Xiaomi POCOM6 Plus 5G携帯電話とPOCO Buds X1ヘッドフォンの物理的な写真を共有しました。この2つの製品の正式発表は2月29日にリリースされます。 8月1日。 Xiaomi POCOM6 Plus 5G携帯電話情報筋によると、Xiaomi POCOM6 Plus 5G携帯電話は6.8インチLCDスクリーン、Qualcomm Snapdragon 4Gen2AEプロセッサー、背面に1億800万画素カメラ、5030mAh容量バッテリーを搭載するとのこと。以前に報告されたように、この電話は紫、黒、銀の 3 色で利用できます。標準の POCOM6 電話とほぼ同じですが、LED フラッシュ リングが比較的目立ちます。ポコブ

Xiaomi POCO X6 Neo携帯電話は3月にインドで発売され、POCO F6は7月に発売される予定 Xiaomi POCO X6 Neo携帯電話は3月にインドで発売され、POCO F6は7月に発売される予定 Feb 15, 2024 pm 02:24 PM

2月8日のニュースによると、@YogeshBrarはPOCOX6Neoが2024年3月にインドで発売されるというニュースを伝えた。このスマートフォンは、昨年11月に中国でXiaomiが発売したRedmiNote13RProのリブランド版となる。ブラー氏はまた、POCOF6が2024年7月にインドで発売される予定だと付け加えた。 Xiaomiは昨年11月にRedmi Note 13R Pro携帯電話をモールで直接発売し、唯一の12GB+256GBバージョンが1,999元で販売された。このマシンには MediaTek Dimensity 6080 プロセッサ (注: オリジナルの Dimensity 810) が搭載されており、最大周波数は 2.4 GHz で、5000 mAh バッテリーが内蔵されており、33 W の高速充電をサポートしています。このマシンには 3 つの色もあり、厚さは 7.73 mm です。

Xiaomi ThePaper OS国際バージョンアップグレード計画が正式に開始 Xiaomi ThePaper OS国際バージョンアップグレード計画が正式に開始 Dec 19, 2023 pm 05:39 PM

Xiaomiは、新しいXiaomi Surging OSの発売を発表しました.HuaweiのHongmeng OSとは異なり、このオペレーティングシステムは国内ユーザーに適しているだけでなく、オリジナルのMIUIシステムを置き換えて海外ユーザーにも提供されます。 Xiaomiの海外ブランドPOCOは、フラッグシップモデルPOCOF5がXiaomi ThePaper OSの国際バージョンアップを最初に開始すると発表しており、他のモデルのアップグレード計画は追って発表される予定であると編集者の理解によれば、海外モデルの最初のバッチはXiaomi ThePaper OSです。 Xiaomi ThePaper OSは、Xiaomi 13T、Xiaomi 13TPro、Xiaomi 12T、Xiaomi 11T、Xiaomi 13、Xiaomi 13Pro、Xiaomi 13 Extreme Commemorative Edition、POCOF5、POCOF5Pro、RedmiNote12を含む合計11モデルにアップグレードできます。

Xiaomi POCO Pad 5Gタブレットは8月23日に海外発売:12.1インチ120Hz画面、スタイラス/外部キーボード対応 Xiaomi POCO Pad 5Gタブレットは8月23日に海外発売:12.1インチ120Hz画面、スタイラス/外部キーボード対応 Aug 16, 2024 pm 10:35 PM

8月16日のこのサイトのニュースによると、Xiaomi POCOは本日、12.1インチ120Hz画面を正式に発表しました。 Xiaomi POCOは今年5月にPOCO Padの標準バージョンを海外で発売しました。このマシンは12.1インチ1600x2560解像度120Hz IPS LCDスクリーンを使用し、8GB RAMと256GBストレージ容量を備え、Qualcomm Snapdragon 7sGen2プロセッサを搭載しています。 Qualcomm Snapdragon 7sGen2 プロセッサは 5G 通信をサポートしているため、この POCOPad 5G タブレットの SoC は、5G 通信をサポートしていない可能性があります。

Xiaomi POCO X6 Neo携帯電話3月13日に海外発売:Dimensity 6080、6.67インチOLEDスクリーン Xiaomi POCO X6 Neo携帯電話3月13日に海外発売:Dimensity 6080、6.67インチOLEDスクリーン Mar 09, 2024 pm 09:07 PM

3月9日のニュースによると、Xiaomi POCOXプラットフォームの公式アカウントによると、POCOX6 Neo携帯電話は2024年3月13日に発売される予定です。この携帯電話は、Xiaomiが中国語で発売したRedmi Note13R Proの名前を変更したバージョンです。昨年11月の本土市場。 Xiaomi RedmiNote13RPro パラメータ情報は次のようにまとめられています。 SoC: Dimensity 6080 プロセッサ (注: オリジナル Dimensity 810) 画面: 6.67 インチ 2400 × 1080 解像度 OLED フレキシブル ストレート スクリーン、グローバル励起輝度 1000nit RAM: 12GB ストレージ容量: 256GB 背面カメラ: 108MPメインカメラ + 2MP 被写界深度フロントカメラ: 16MP バッテリー: 5000 mAh、33W 有線高速充電をサポート

Xiaomi、5G接続を備えた新しいPoco Padの発売日を明らかに Xiaomi、5G接続を備えた新しいPoco Padの発売日を明らかに Aug 17, 2024 am 06:32 AM

Xiaomiは、Pocoブランドで発売される新しいAndroidタブレットを発表しました。これはPoco Pad 5Gと呼ばれ、このタブは8月23日にインドで発売される予定だ。Pocoブランドで発売された初のテーブルは今年5月に公開された。

See all articles