私は、クライアントピアがTCP-IP経由で互いに通信するプログラムを持っています。あるクライアントが何かをすると、彼は他のクライアントにこれが起こったことを一つずつ伝えます。ここで私は全体のデータを送信するために使用したコードです:TcpClientの作成が非常に遅いようです。それらをキャッシュすることはできますか?
public static string SendDirect(string data, string hostName, int portNumber)
{
string responseData;
try
{
var client = new TcpClient(hostName, portNumber);
Stream s = client.GetStream();
var sw = new StreamWriter(s) { AutoFlush = true };
sw.WriteLine(data);
s.Close();
client.Close();
s.Dispose();
sw.Dispose();
responseData = "OK";
}
catch (SocketException ex)
{
responseData = ex.Message;
}
return responseData;
}
ライン=新しいれるtcpClient(ホスト名、 のportNumber)
のvarクライアントは、
いくつかのマシンでは非常に遅くなることがあります。たとえば、私のホームネットワークでは2〜3秒かかります。 15人のクライアントで本当に悪いことが分かりますか?
いつもクライアントを閉じずに、30〜40人を常時開いておくことができれば、どれくらいの費用がかかりそうですか?私は彼らが生きていることを確認するためのチェックメカニズムと仮定し、すべてが正しく閉じられていることを確認するために、アイデア自体が正しいかどうか疑問に思う。
ありがとう!
ホスト名を解決することはどういう意味ですか?知的財産権を取得して使用することを意味しますか? 私はしたいことが適切な方法だと言っていますか? 40以上の接続を開いて維持することは傷つきませんか?はい、現在のところ、表示されているように、私は各コマンドで40個を開閉しています。 – katit
ストリームを維持/フラッシュする際のサンプルコードは手元にありますか?すべての私のパケットは今、1k以下の非常に小さい。 – katit
あなたのインフラストラクチャ、デザインなどでサポートされていれば、それらを開いたままにしておくとよいでしょう。特に永続的な再接続と比較して。 DNS名の解決は、特定のホスト名に一致するIPを取得するプロセスです(これは、OSによってキャッシュされる必要がありますが、それでもやはり速度低下を引き起こす可能性があります)。ストリームを保持するには、ストリームを閉じずにオブジェクトを破棄してください。フラッシュするために、大部分ではないにしても、ほとんどの場合、 'Flush()'メソッドをサポートしています。 – Mario