Новая версия патчера | 1.9.1.5 |
Здравствуйте, гость ( Вход | Регистрация )
Новая версия патчера | 1.9.1.5 |
7.1.2009, 20:36
Сообщение
#1
|
|
Активный участник Группа: Пользователи Сообщений: 89 Регистрация: 28.12.2008 Пользователь №: 77 |
Исправил вроде досадную ошибку с двойным отображением основного трекера.
Проверяйте внимательно - основной трекер теряться не должен (но на определенных клиентах наверно может - стандарт для каждого "свой"). 1.9.1.5 |
|
|
9.1.2009, 0:58
Сообщение
#2
|
|
Активный участник Группа: Пользователи Сообщений: 89 Регистрация: 28.12.2008 Пользователь №: 77 |
Так, сегодня несколько часов мучал потоки - то, с какой скоростью он проверяет в тестовом проекте было совершенно неприемлемо - невероятно медленно. 2110 секунд (35 минут). Если кто-то знает лучше, или может предложить иной метод, нежели этот - вэлкам... Текущая функция Код /// <summary> /// Checks connection to current server and port /// </summary> /// <param name="server">server to connect</param> /// <param name="port">port to connect</param> /// <returns>connection success or not</returns> private void CheckConnection() { if (!_http) { IPHostEntry hostEntry = null; _result = false; try { // Get host related information. hostEntry = Dns.GetHostEntry(_server); // Loop through the AddressList to obtain the supported AddressFamily. This is to avoid // an exception that occurs when the host IP Address is not compatible with the address family // (typical in the IPv6 case). foreach (IPAddress address in hostEntry.AddressList) { IPEndPoint ipe = new IPEndPoint(address, _port); Socket tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp); tempSocket.Connect(ipe); if (tempSocket.Connected) { _result = true; tempSocket.Close(); } } } catch { _result = false; } } else { try { HttpWebRequest reqFP = (HttpWebRequest)HttpWebRequest.Create(_server); HttpWebResponse rspFP = (HttpWebResponse)reqFP.GetResponse(); if (HttpStatusCode.OK == rspFP.StatusCode) { // HTTP = 200 - Internet connection available, server online rspFP.Close(); _result = true; } else { // Other status - Server or connection not available rspFP.Close(); _result = false; } } catch (WebException) { // Exception - connection not available _result = false; } } } } Итого: -удалось рассинхронизировать проверку ретрекеров - полный список Москвы (87 хостов) он теперь проверяет за 78 сек. (вот такой каламбурчик - от машины не зависит, от коннекта тоже - ест в пике 2Кб/с, вся проблема именно в ожидании ответа - ждет ответа он "до упора"). -не удалось запихнуть весь пул потоков в отдельный поток - посему все это происходит "на глазах изумленных пользователей". -варианты с сервисами/отдельными процессами даже не рассматривались - это патчер - он должен быть маленьким и не надоедливым. -ретрекеры плохо проверяются по ответу http. -адрес должен в обязательном порядке содеражть порт. PS Так как мы еще не закончили ворошить список ретрекеров из старого в новый - просьба всем внимательно на него смотреть. Это "очень тестовая" версия. 1.9.1.6 |
|
|
9.1.2009, 7:01
Сообщение
#3
|
|
Активный участник Группа: Главные Админы Сообщений: 661 Регистрация: 15.12.2008 Из: Москва Пользователь №: 15 |
Так, сегодня несколько часов мучал потоки - то, с какой скоростью он проверяет в тестовом проекте было совершенно неприемлемо - невероятно медленно. 2110 секунд (35 минут). А выставить таймаут скажем не "до-упора", а 3-5 секунд? И http лучше заменить на сокеты с таймаутами, http блин грёбанный действительно всё тока портит Про "обязательно должен быть порт" - если он не указан - ставь восьмидесятый -------------------- |
|
|
Текстовая версия | Сейчас: 24.9.2024, 19:15 |