私は、2,000以上の長期的な永続的なクライアントTCP接続を維持するアプリケーションサーバーを作成しています。接続を非同期的に受け入れ、接続からデータを読み取る最も効率的な方法を知りたいです。
基本的に、次のようなパブリックフットプリントを持つクラスですべてのソケットコードをラップしたいと思います。
public partial class ApplicationClient
{
private Socket socket;
public ApplicationClient(Socket socket)
{
this.socket = socket;
}
public event ApplicationMessageEventHander MessageReceived;
private void OnMessageReceived(string message)
{
ApplicationMessageEventHander messageReceived = this.MessageReceived;
if (messageReceived != null)
{
var eventArgs = new ApplicationMessageEventArgs(message);
messageReceived(this, eventArgs);
}
}
}
このアーキテクチャに適合するために.NETのソケットを使用する最良の方法は何ですか?
編集:クライアントによって渡される各メッセージは改行で終了することにも言及する価値があります。メッセージ全体が受信されるまで、イベントを発生させたくありません。