Организация потоков TCPClient

173
08 июня 2018, 21:00

Я занимаюсь разработкой игрового сервера. Через 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 можно указывать порядок выполнения методов, но только до запуска задач. Есть ли возможность запускать всю обработку пакетов в отдельном потоке, чтобы все действия выполнялись синхронно в порядке очереди? Или есть ли какая-нибудь альтернатива этому?

READ ALSO
Сортировка методов в коде

Сортировка методов в коде

Имеет ли Visual Studio средства с помощью которых можно было бы выполнить сортировку методов в коде? Например, по алфавиту, по доступу и т п?

172
Помогите разобраться с массивами [закрыт]

Помогите разобраться с массивами [закрыт]

Народ помогитеНе могу никак освоить массивы в C#

139
Останавливается анимация в WPF

Останавливается анимация в WPF

Есть такой эллипс:

172
Печать DataGridVeiw

Печать DataGridVeiw

Нужна помощьКак мне распечатать всю таблицу из DGV? Я паршу информацию с бд таким образом:

159