|
|
|
|
Автор:
|
Шмачилин Павел
|
|
Тема:
|
RE[2]: Проблема с Socket в .NET
|
|
Дата:
|
12/23/2009 11:20:00 PM
|
Вы получаете подключённого клиента синхронно. Сделайте асинхронную обработку получения подключившегося клиента и будет вам счастье... и геморой многопоточности.
>хех, сейчас тоже столкнулся с такой фигней.
>ничего кроме этого вопроса по данной теме не нашел :)
>в общем, тормоза на акцепте.
>так вот, если коннектиться не по имени, а по ip задержки нет.
>
>>Я пишу маленькое приложение, которое использует System.Net.Sockets. Для того, чтобы сервер "слушал" клиентов я пишу что-то вроде:
>>
>>static void Main(string[] args)
>>{
>> TcpListener tcpl = new TcpListener(8888);
>> tcpl.Start();
>> int requestnumber = 0;
>> while (true)
>> {
>> Console.WriteLine("Waiting...");
>> TcpClient tcpclient = tcpl.AcceptTcpClient();
>> Console.WriteLine("Request " + (++requestnumber).ToString());
>> tcpclient.Close();
>> }
>>}
>>
>>и клиент:
>>
>>static void Main(string[] args)
>>{
>> DateTime timebegin = DateTime.Now;
>> for(int i = 0; i < 100; i++)
>> {
>> HttpWebRequest wReq =
>>(HttpWebRequest)WebRequest.Create(@"http:\\localhost:8888");
>> wReq.Method = "POST";
>> byte[] bytes = System.Text.Encoding.ASCII.GetBytes("Hello");
>> wReq.ContentLength = bytes.Length;
>> try
>> {
>> using(Stream outputStream = wReq.GetRequestStream())
>> outputStream.Write (bytes, 0, bytes.Length);
>> }
>> catch(Exception) {}
>> try
>> {
>> HttpWebResponse wResp = (HttpWebResponse)wReq.GetResponse();
>> using(StreamReader reader = new
>>StreamReader(wResp.GetResponseStream(),System.Text.Encoding.UTF8))
>> reader.ReadToEnd();
>> }
>> catch(Exception) {}
>> }
>> Console.WriteLine((DateTime.Now - timebegin).ToString());
>> Console.ReadLine();
>>}
>>
>>Все работает нормально, кроме одного - слишком долго обрабатывается запрос от клиента. Порядка 300-400 миллисекуд. Причем "тормоз" происходит именно на
>>строчке TcpClient client = listener.AcceptTcpClient(); ПРи всем при том, загруженность процессора порядка 1-2 процентов и винчестер "молчит". Т.е. - дело не в ресурсах...
>>Что происходит? Почему так долго? Есть ли какой-то вариант от этого избавиться?
>>
>>
|
|
|
|