@ Kartoos Khan, я сделал несколько сервисов с этими требованиями, и использование асинхронных методов - лучший способ создания высокопроизводительных сервисов в C #, потому что:
- Он не блокирует периферию ввода-вывода, так какмогут быть розетки.
- Минимизируйте потоки и улучшите производительность.
Позвольте мне порекомендовать вам книгу Написание высокопроизводительного кода .NET .Глава 4, Асинхронное программирование содержит информацию, которую вы должны знать для повышения производительности.
По моему опыту, это мои рекомендации:
Создать основную угрозу для обработки основной программы.
Создать класс для обработки Socket Server, который реализует асинхронный процесс для приема соединений, используя методы BeginAccept
и EndAccept
, здесь - пример того, как его использовать.Создайте другой класс для обработки соединений с сокетом, который имеет в качестве свойства объект Socket
.
2.1 создает метод для запуска процесса чтения, который будет вызываться классом Server для запуска связи междуконечные точки.Этот метод запустит процесс чтения в асинхронном режиме.
2.2 Для чтения и записи асинхронным способом необходимо получить NetworkStream
из сокета и использовать методы BeginRead
иEndRead
для получения данных и BegineWrite
и EndWrite
для отправки данных. Здесь есть документация.
В случае, если вашей службе требуется только подключение к серверу, игнорируйте шаг 1 и реализуйте класс Client, чтобы начать подключение к определенной конечной точке.
Используйте класс коллекции, например, коллекцию Dictionary
, Key-Value-Pair , для хранения каждого класса клиента и использования идентификатора сокета в качестве ключа для доступа к каждому клиенту.Класс.
Из-за того, что каждый клиентский сокет обрабатывает свой собственный сокет, я использую для реализации способ переподключения к одному и тому же клиентскому сокету, таким образом, каждый клиент отвечает за себя.
Основная программа будет отвечать за создание каждого клиентского сервера и настройку конечной точки каждого клиента по мере необходимости, а также начнет подключение каждого из них.В этом случае TCPClient
позволяет запустить асинхронный процесс подключения, используя методы BeginConnect
и EndConnect
.
Здесь вы можете увидеть более подробную информацию об этой проблеме.
Я надеюсь, что это может быть полезно для вас.