Я занимаюсь разработкой игрового сервера. Через TCPListener я принимаю клиентов.
var Listener = new TcpListener(IPAddress.Any, CommonConfig.Settings.GamePort);
Listener.Start();
ListenerStarted = true;
while (ListenerStarted)
{
TcpClient tcpClient = await Listener.AcceptTcpClientAsync();
ProcessClientTearOff(tcpClient);
}
Затем через ReadAsync идет получения данных от клиента.
byte[] Buffer = new byte[8192];
int i = await Stream.ReadAsync(Buffer, 0, 8192);
После этого идет обработка данных с помощью метода
RequestHandling(byte[] data)
и выполнение различных действий. Клиенты активно взаимодействуют между друг другом и потому возникают проблемы с потокобезопасностью. В данный момент мне сложно их отследить и решить. Я искал информацию о том, как грамотно организовать структуру сервера и нашел вариант, что получение данных идет асинхронно (как у меня сейчас), а вот обработка и выполнение действий происходит в одном потоке.
Один поток на принятие клиентов и получение данных, один поток на обработку и выполнение, один поток на отправку данных клиентам.
Но я не могу понять, как это можно реализовать. Через Task можно указывать порядок выполнения методов, но только до запуска задач. Есть ли возможность запускать всю обработку пакетов в отдельном потоке, чтобы все действия выполнялись синхронно в порядке очереди? Или есть ли какая-нибудь альтернатива этому?
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Имеет ли Visual Studio средства с помощью которых можно было бы выполнить сортировку методов в коде? Например, по алфавиту, по доступу и т п?
Нужна помощьКак мне распечатать всю таблицу из DGV? Я паршу информацию с бд таким образом: