問題タブ [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.
c++ - Visual C++ プログラムがクラッシュしましたが、ダンプファイルが生成されませんでした。なぜ?
私は非常に奇妙な状況にあります。C++ で Visual Studio 2010 によってプログラムされた IOCP サーバー プログラムを実行しています。
「minidump」を使用しているため、ポインタの誤用などの論理的なバグがある場合、プログラムはダンプファイルでクラッシュするため、コードのクラッシュポイントがどこにあるかを知ることができます.
ときどき (ごくまれに)、プログラムがクラッシュし、ダンプ ファイルがなくなることがあります。
どのような状況が機能しSetUnhandledExceptionFilter()
ないのですか? 誰もこの問題を知っていますか?わかりません。
java - Java (Android) で IOCP サーバーに接続する
Androidでオンラインゲームを作りたいです。
C++ 経由で IOCP モデルのサーバーを作成する予定です。これはうまくいくはずです。問題はクライアントです。
C++ での IOCP クライアントの例ではWSASyncselect
、 またはを使用していWSAEventSelect
ます。
非同期ソケットと同じように機能する Java の例は見つかりませんでした。
質問:
WSASyncselect()
Javaのようなものはありますか?- そうでない場合、どうすればできますか?
c++ - I/O 完了ポートとイベントを同時に待機するにはどうすればよいですか?
これを達成する方法はありますか?
たとえば、10 個のワーカー スレッドがタスクをプルしている I/O 完了ポートがあります。各タスクはオブジェクトに関連付けられています。一部のオブジェクトは同時に処理できないため、1 つのスレッドがこれらのオブジェクトの 1 つを処理しているときに、2 番目のスレッドがこのオブジェクトを必要とするタスクを取り出した場合、2 番目のスレッドは最初のスレッドが完了するまで待機する必要があります。
回避策として、オブジェクトはリリース時に通知されるイベントを持つことができます。タスクが受信されたためにロックされたオブジェクトが必要なためにスレッドが「スタック」している場合、ロックされたオブジェクトが解放されるか、新しいタスクがキューに入れられるのを待つことができます。新しいタスクを取得すると、処理できなかったタスクをキューに戻します。
私は別のアプローチを知っていますが、これは存在すべき機能のようです。これは Windows API で実現できますか?
c# - ファイルストリームの順序を維持しながら、複数のファイルを同じio完了ポートに関連付けますc#
別のプロセスから送信されたオブジェクトを、ディスク上のいくつかのファイルに書き込む必要があります。各オブジェクトには、fileID(書き込まれるファイルの名前)とデータのチャンクが付属しています。
同時非同期I/Oを使用して、ファイルの書き込みを最適化するためにIO完了ポート(IOCP)を使用したいのですが、各ファイルを同期的に書き込む必要があります。たとえば、書き込み時にファイルごとのチャンク順序を維持する必要があります。ディスクはありますが、ファイルの順序はありません。
.NetがIO操作を実行するたびにIOCPを使用することを理解していますが、どうすれば希望どおりに動作させることができますか?
windows - Windows IOCPを使用して切断(RST / FIN)を検出する方法は?
Windows IOCP APIを使用して、TCP接続がピアによって(RSTパケットなどを送信することによって)切断されたかどうかを確認するにはどうすればよいですか?具体的には、データを送受信できません。重複する操作は実行されていません。非同期通知を受け取りたいだけです。それを行う方法はありますか?
c++ - クライアント データをすばやく取得する
selectを使用せずに多くのクライアントから適度な量のデータをすばやく取得するためのより良い方法(Windowsを使用)はありますか(ただし、必要に応じてselectを使用します)。IOCP は私には良くなく、ippoll は Linux 用です。TLS を実行しているため、これは OpenSSL と互換性がある必要があります。何らかの理由で、BIO オブジェクトが私のマシン (Windows 7) で機能しません。そのため、暗号化を winsock 接続にピギーバックしました (これは機能しました)。よろしくお願いいたします。
c++ - IOCP ベースのクライアントでの IO データごとの使用
IOCP TCP クライアントを作成しようとしていますが、コードは次のようになります。
TCPClient.h:
TCPClient.cpp:
main.cpp:
「m_pPerIoData」の使用は明らかに間違っています。なぜなら、SendCommand() を実行するたびに新しくなり、適切に削除していないからです。
- Q1. m_pPerIoData = new PER_IO_DATA はどこで実行すればよいですか?
- Q2. メンバ変数として PER_IO_DATA へのポインタを持つことは理にかなっていますか?
編集2:
混乱していたので、上記の既存のコードの名前を変更しました (クライアント -> 接続)。
背景:
- LAN (またはシリアル ポート) 経由で接続された ECR (電子キャッシュ レジスタ) デバイスを制御するために使用される DLL を作成しています。
- DLL は、Connect()、Disconnect() などの使いやすいインターフェイスと、Logon()、Logoff()、ReadCard() などの ECR 固有のコマンドを提供します。
- (おそらく私のアプリケーションではやり過ぎですが...) DLL で IOCP を使用して、ECR との間でデータを非同期的に送受信したいと考えています。
私の最上位クラスは次のようになります。
そして、ECR クラスによって作成され、すべてのハードワークを行う TcpConnection クラスを取得しました。Ecr クラスと Connection クラスはどちらもコピーできません。
接続.h:
TcpConnection.h:
TcpConnection.cpp:
ホスト アプリケーションは、ECR デバイスごとに DLL インスタンスを作成します。
Ecr が下でデータ転送がどのように行われるかを気にしたくないので、Ecr レベルではなく、TcpConnection レベルですべての IOCP 関連のものを必要とします。
私の考えはうまくいきませんか?
c++ - UDP で IOCP を使用していますか?
TCPに関しては、入出力完了ポートが何のためにあるのかについてはよく知っています。
しかし、たとえば、FPS ゲームのコーディングを行っている場合や、低レイテンシーが必要な場合は問題が発生する可能性があります。プレーヤーの空間データを失うことを犠牲にしても、最高のプレイ体験を提供するためにプレーヤーに即座に応答する必要があります。行く。UDPを使用する必要があることが明らかになり、座標の更新を頻繁に送信するだけでなく、チャット メッセージなどのイベントを処理するために、ある程度信頼性の高いプロトコルを実装する必要があります (TCP は UDP でパケット損失を引き起こすため、これら 2 つを混在させないようにする必要があります)。または、パケット損失が重大な場合がある発砲。
MMOFPSゲームに適用されるパフォーマンスを目指しているとしましょう。これは、1つの永続的な世界で何百人ものプレイヤーに会うことを可能にし、銃で戦うことは別として、チャットメッセージなどを介して通信できるようにします-このようなものは実際に存在します.うまく動作します - PlanetSide 2 をチェックしてください。
ネット上の多くの記事 (msdn など) では、ソケットのオーバーラップが最適であり、IOCP は最高レベルの概念であると述べていますが、TCP 以外のプロトコルを使用する場合を区別していないようです。
したがって、そのようなサーバーを開発するときに使用される I/O 手法に関する信頼できる情報はほとんどありません。これを見てきましたが、このトピックは非常に物議をかもしているようで、これも見ましたが、最初のリンクでの議論を考慮してください。 、2番目の仮定に従うべきかどうか、UDPでIOCPを使用する必要があるかどうか、そしてそうでない場合、 UDPに関して最もスケーラブルで効率的なI / Oコンセプトは何ですか。
それとも、時期尚早の別の最適化を行っているだけで、現時点では事前に考える必要はありませんか?
gamedev.stackexchange.com に投稿することを考えましたが、この質問は汎用ネットワーキングに当てはまると思います。
c++ - IOCP のワーカー スレッド ロジックを構築する方法
LAN経由でPCに接続されたデバイスと通信するクライアントプログラムを作成しています。
私のプログラムとデバイス間の典型的な通信は次のとおりです。
最初のバイト シーケンスの最後の 16 進数は、続くデータのサイズを示します (D = 13 バイト)。
私の送信ルーチンは次のようになります。
そして、私のワーカー スレッド ルーチンは次のようになります。
上記のコードで私の質問を参照してください。
どうもありがとう
c++ - 新しいソケットの C++ CreateIoCompletionPort
編集:問題は、コンテナー内の OVERLAPPED または WSAOVERLAPPED を完了ポートに関連付ける必要があることだと思います。あれは正しいですか?
誰かが私のサーバーに接続すると、IO 完了を取得できます。次に、新しいソケットで CreateIoCompletionPort を使用し、元のソケットが使用された完了ポートを使用します。しかし、彼らが私にデータを送信すると、それは開始されません。ただし、他の誰かが接続すると、それでも開始されます。私の質問は、なぜこれが起こるのでしょうか? また、CreateIoCompletionPort が元のハンドルと同じハンドルを返すようにします。何を与える?
編集: