TcpClient Очередь или могопоточность - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте... Я уже было дело - делал тему о своём нетворк фреймворке, и он теории в небольших объемах справляется. Но вот при более больших объемах - научились проблемы. И я даже не знаю в чем именно. 1. Это при отключении конекта при исполнении хука OnDisconnect порой ошибка внутри о том что поток находился на стадии уничтожения. 2. Переодические проблемы с логом в файл, он переодически писал что файл занят другим процессом(Да, да, да. Каждое действие от каждого юзера это отдельный File.AppendAllText) 3. Откудато сейчас появилась проблема что раз в Nое время сервер начинает кушать не как раньше - мение 1% а начинает кушать все 100% с учетом что стоит 2 процессора на сервеной машине по 8 ядер. Сам фреймворк работает по такому принцепу. Создается while(true) в котором принмаются клиенты, и при подключении нового клиента я создаю поток с этим клиентом и там же обьявляю все данные пользователя и создаю новый поток под StreamReader.ReadLine тоже в While(true). Как только появляется запрос - я для него создаю новый поток и там уже вызываю хук OnPacket. А сам дальше проверяю новые запросы. Кто что может посоветовать? Или структуру в кратце новую описать для TCP сервера. Завтра начну с переписывания фреймворка скорее всего =(

Решение задачи: «TcpClient Очередь или могопоточность»

textual
Листинг программы
public static void Log(string str, string type = "text")
        {
                switch (type)
                {
                    case "info":
                        Console.ForegroundColor = ConsoleColor.Blue;
                        break;
                    case "warning":
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        break;
                    case "error":
                        Console.ForegroundColor = ConsoleColor.Red;
                        break;
                    case "success":
                        Console.ForegroundColor = ConsoleColor.Green;
                        break;
                }
                var text = "[" + DateTime.Now.ToString("HH:mm:ss fff") + "]: " + str;
                Console.WriteLine(text); // Формируем дату и тут же отправляем в консоль дату с текстом
 
            try
            {
                if (Application._Config.ContainsKey("log.tofile") && Application._Config["log.tofile"] == "1" && Application._Config.ContainsKey("log.file"))
                {
                    File.AppendAllText("./Data/Logs/" + Application._Config["log.file"].Replace("{d}", DateTime.Now.Day.ToString()).Replace("{m}", DateTime.Now.Month.ToString()).Replace("{y}", DateTime.Now.Year.ToString()), "\r\n" + text);
                }
            }
            catch (Exception ex)
            {
                type = "error";
                Console.ForegroundColor = ConsoleColor.Red;
                text = "[" + DateTime.Now.ToString("HH:mm:ss fff") + "]: Нагрузка, ну просто ахуеть! Строка не залогировалась.";
                Console.WriteLine(text);
            }
            if (type != "text") Console.ResetColor(); // Если мы меняли цвет то возвращаем его обратно
            
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы