問題タブ [iocp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
557 参照

winapi - TransmitFile + SChannel

Windows 上の効率的なマルチスレッド ファイル サーバー用に、I/O 完了ポートを備えた TransmitFile API を使用しています。

これはすべて正常に動作しますが、SChannelを使用してセキュア ソケットも実装しました。TransmitFile はファイルをソケットに直接ストリーミングするため、EncryptMessage を呼び出す方法がわかりません。ファイルをチャンクで読み取り、暗号化して手動で送信する必要がありますか?

TransmitFile が高パフォーマンスのファイル転送のみを目的として提供されており、安全なソケットがかなり一般的である場合、これは少しばかげているように思えます。そもそもTransmitFileがIIS用に実装されていると信じていることを考えると、IISは何をしているのでしょうか。

(もともと "TransmitFile" と "EncryptMessage" のハイパーリンクを作成していましたが、スパム対策で許可されていたのは 1 つだけでした - 申し訳ありません)

0 投票する
2 に答える
155 参照

c++ - ソケットベースのモデルの私のグラフィック表現と解釈

http://img600.imageshack.us/img600/3567/graphicrepresentation.png

私は正しい方法で推論していますか?もしそうなら、上のスキームのように、 I / O Completion Portsがどのように機能するかを誰かに教えてもらえますか? MMORPG 用のサーバーのような高性能サーバーの作成について学ぶ前に、それがどのように機能するのかを確認したいと思います。

0 投票する
1 に答える
857 参照

c# - I/O完了ポートサポートのテスト

SMTPメールサーバー( LumiSoft Mail Server )のコードで次のコードを見つけました。メソッドの名前に従って、プラットフォームがI/O完了ポートをサポートしているかどうかをテストします。

正常に動作しているように見えますが、Mono/Linuxでは失敗します。このメソッドSendToAsyncは、その名前が示すように、非同期で実行されます。別のスレッドでも実行されます。ただし、実行を開始すると、このメソッドの最後の部分ですでにソケットが閉じObjectDisposedExceptionられ、他のスレッドでが発生します。

それで、IOCPサポートをテストするための間違ったテクニックはありますか?なぜWindowsで動作するのですか?IOCPサポートをテストする適切な方法は何ですか?

0 投票する
3 に答える
1435 参照

c++ - IOCP を使用してユーザー定義データをワーカー スレッドに渡す方法は?

ちょっと... I/O 完了ポートと winsock を使用して小さなテスト サーバーを作成しました。ソケットハンドルを完了ポートに正常に接続して関連付けることができます。しかし、ユーザー定義のデータ構造をワーカースレッドに渡す方法がわかりません...

私がこれまでに試した(ULONG_PTR)&structure asのは、の関連付け呼び出しで完了キーとしてユーザー構造を渡すCreateIoCompletionPort() ことでしたが、うまくいきませんでした。

ここで説明されているように、独自の OVERLAPPED 構造を定義し、CONTAINING_RECORD() を使用してみましたhttp://msdn.microsoft.com/en-us/magazine/cc302334.aspxおよびhttp://msdn.microsoft.com/en-us /magazine/bb985148.aspx . しかし、それもうまくいきません。(pHelper の内容に奇妙な値が表示されます)

私の質問は次のとおりです: WSARecv()、GetQueuedCompletionStatus() および Completion パケットまたは OVERLAPPED-strucutre を使用してワーカー スレッドにデータを渡すにはどうすればよいですか?

編集:「接続ごとのデータ」を正常に送信するにはどうすればよいですか?... (上記の 2 つのリンクで説明されているように) それを行う技術が間違っているようです。

ここに私のコードがあります:(はい、それは醜い唯一のテストコードです)

0 投票する
1 に答える
511 参照

c++ - タスクスケジューラを使用したIOCP(スレッド化されたビルディングブロック)

私はTBBを使用していて、タスクスケジューラでIOCPをどのように使用できるのか疑問に思っていました。誰かがこれをしましたか?もしそうなら、いくつかの詳細をいただければ幸いです。

IOCPの経験はあまりありませんが、IOCPを使用してすべてのスレッドにメッセージを送信したいと思います。タスクスケジューラの外部では、IOCPにスレッドへのハンドルを与えることができます。ただし、TBBでは、スレッドへのハンドルを確実に取得する方法が完全にはわかりません。

ありがとう!

0 投票する
3 に答える
1996 参照

c - イベント駆動型アプリケーションの IPC ソリューションの選択

私は現在、Linux での epoll および他のプラットフォームでの同等のテクノロジを中心に設計された、かなり大規模なシングルスレッドのイベントベースのアプリケーションに取り組んでいます。現在、2 つのインスタンスを通信させたい場合は、通常、同じマシン上で実行されているかどうかに関係なく、ソケットを介して行われます。パフォーマンス上の理由から、同じマシンの通信を高速化するために何らかの形の IPC を使用することを想定しています。ここで、どの IPC メカニズムを使用するかを決定する必要があります。

私にとって重要な要素は次のとおりです。

  • 完全な再設計なしのイベント駆動型 -- IPC メカニズムが epoll にうまく適合しない場合、それは私にとって何ヶ月もの作業が失われることになります
  • 高速 -- このメカニズムがソケットよりも高速でない場合、時間をかけて実装する価値はありません
  • 柔軟で、実行中に (再) 構成可能 -- これにより、MPI などを排除できると思います。
  • マルチスレッドは必要ありません。

すべてが同じパラダイムを使用している限り、プラットフォームごとに異なるメカニズムを使用したいと考えています。また、プラットフォーム固有のバインディングのために、C / C++ / Obj-C についても必要なだけ深く掘り下げたいと思っています。

なにか提案を?

ありがとう。

0 投票する
1 に答える
1982 参照

ssl - IOCP ベースの Windows サーバーに SSL を追加する最も簡単な方法は?

長い間使用してきた IOCP ベースのサーバーがあります。ここで、これに SSL サポートを追加する必要があります。私はきれいな解決策を見つけるのに苦労しています。他の2つのスレッドで提案された2つのオプションを見つけました-

1)openssl Memory BIOを使用します-しかし、IOCPのマルチスレッドの性質のために発生する問題を説明するIOCPポートで動作する例はネット上で見つかりませんでした。2)sslでBoost ASIOを使用します-これは内部でIOCPを使用すると思います。ただし、接続ごとの状態データを保存する方法を示す例はありません。たとえば、サーバーには、接続されているクライアントごとに状態情報が保存されています。この状態情報は、クライアントを認識し、それに応じてクライアントから送信されたデータを解析するために使用されます。

上記の 2 つの問題の解決策、またはその他の解決策を提案していただければ幸いです。

更新: winsock2 ライブラリに IOCP を実装するために Simple C を使用しています。

よろしくニラドリ

0 投票する
3 に答える
1337 参照

c++ - TCP IOCP が acceptex 後に受信しない

IOCP サーバーを作成しようとしています。基本的に、新しい接続を受け入れるようにしています。テストの目的で、127.0.0.1 を実行して接続しています。

AcceptEx() を呼び出す前に、疑似ソケットを作成します。接続が受け入れられると、新しい疑似ソケットが通信に使用されます。この新しいソケットは io 完了ポート [CreateIoCompletionPort] に関連付けられ、[SO_EXCLUSIVEADDRUSE] と [SO_CONDITIONAL_ACCEPT] といういくつかのオプションを割り当て、WSARecv() を呼び出して着信データを受け入れます。

問題は、リモート接続がサーバーに接続すると、データは送信されますが、そのデータが受信されないことです。データを受信して​​いない理由について誰かがアイデアを提供できるかどうか疑問に思っていますか? 私の論理が間違っているのではないでしょうか?コードを数回実行しました。エラーは記録されません。

編集:文言を修正しました。AcceptEx() 呼び出しの前にソケットを作成します。

私のコードの基本的なロジック:

注: 疑似ソケットからリモート ソケットに送信しようとしましたが、データを逆に送信するのと同じ問題がありました。

0 投票する
6 に答える
9952 参照

delphi - 多くのネットワーク デバイスに同時に ping を実行する最良の方法は何ですか?

ネットワーク内の多くのデバイス (300 以上) を繰り返し ping でポーリングします。

プログラムはデバイスを順番にポーリングするため、低速です。投票速度を上げたい。

Delphi 7 でこれを行う方法がいくつかあります。

  1. 各デバイスには、ping を実行するスレッドがあります。スレッドを手動で管理します。
  2. Indy 10 を学び、使用します。例が必要です。
  3. ウィンドウ メッセージに基づいてオーバーラップ I/O を使用します。
  4. イベントに基づいて完了ポートを使用します。

より速く、より簡単なことは何ですか?たとえば、いくつかの例やリンクを提供してください。

0 投票する
3 に答える
28809 参照

windows - I/O完了ポートのメリットとデメリット

I/O 完了ポートが高速で優れたモデルであると多くの人が言うのはなぜですか?
I/O 完了ポートの長所と短所は何ですか?

I/O 完了ポートが他のアプローチよりも高速になるポイントを知りたいです。

他のモデル(select、epoll、従来のマルチスレッド/マルチプロセス)と比較して説明できるとより良いでしょう。