5

データを周期的に取得するには、独自のプロトコルでTCPを介して何千ものクライアントに接続する必要があります。C#で.NETサーバーアプリケーションを作成する必要があります。

最初の試みは、tcpソケットごとに独自のスレッドを作成することでした。これは機能しますが、CPUを大量に使用する必要があります。

代わりに.NETスレッドプールを使用する方がよいことがわかりました。私が理解している限り(http://msdn.microsoft.com/en-us/library/ms973903.aspx)、タイマーを使用して、各ソケットに特定の期間(1秒など)でデータを周期的に取得させることができます。開いているソケットが再び回転する前に開く必要のあるソケットがたくさんあるため、接続がオープンエンドになるとソケットがタイムアウトするため、これは私には機能しません。

別の試みは、非同期コールバックを使用することでした。これは私にとってはうまくいくでしょうが、ソケットにデータを周期的に取得させる方法がわかりません???

4

2 に答える 2

6

ソケットごとに1つのスレッドを使用せずに、非常に多数のソケットで同時にデータを受信できるSocketの高性能APIを使用してみてください。記事の下部に、完全なサンプルへのリンクがあります。SocketAsyncEventArgsクラスのMSDN記事にもサンプルがあります。

于 2012-04-24T15:02:57.530 に答える
0

ポーリングする必要のあるアドレスをキューに入れて、スレッドプールにアイテムをキューから取り出して処理させてみませんか?

アイテムを使い終わったら、それをキューの最後にプッシュします。

于 2012-04-24T14:54:50.953 に答える