2015-07-19 1 views
0

Я настраиваю игру с Lidgren, и мне было интересно, есть ли способ прочитать сообщение от определенного клиента, а не только от сервера в целом, например -Прочитайте сообщение от определенного клиента в Lidgren

//Why doesn't this exist? 
NetIncomingMessage message = server.Connections[0].ReadMessage(); 

Таким образом, я смог бы разделить считывания данных с каждого клиента в его собственном потоке, и есть отдельный поток для передачи данных к каждому клиенту. В настоящее время на моем сервере есть только один цикл, который читает пакеты, и я боюсь, что он предпочитает одного клиента больше, чем другие, так как некоторые движения, сделанные игроками, требуют времени, чтобы их принимали другие игроки. Я считаю, что чтение сообщений отдельно от каждого клиента решит эту проблему. С помощью простых TcpClients вы можете читать поток каждого клиента, а не сервер в целом, и мне нравится эта функциональность, но также полагаться на простоту отправки пакетов через Lidgren и интересно, была ли аналогичная функциональность с Lidgren.

ответ

0

Вы можете читать сообщения в одном потоке, а затем вводить их в параллельную безопасную коллекцию в сообщении, например, connection.Tag. Каждый отдельный поток затем удаляет сообщения для этого соединения. Однако; это звучит как действительно плохое решение проблемы, которая, как я полагаю, является ошибкой в ​​существующем коде ... нет причин, по которым чтение сообщений в одном потоке будет благоприятствовать любому клиенту над другим; сообщения выводятся в очередь и выгружаются в том порядке, в котором они поступают. Выполнение одного потока на одного клиента создаст целую кучу проблем синхронизации, которые вы должны решить, воздействуя на содержимое полученных сообщений; Я бы советовал против этого, если у вас нет очень веских оснований.