Сетевое общение - очередь обработки потока / задача или? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть приложение, которое отправляет сообщения через сокет из разных потоков. Я создаю свою собственную оболочку для сокета, которая позволяет мне расширять функциональность.

  • в новом SocketConnection () возвращает только один экземпляр на основе IP и порта. Поэтому, если какой-то другой поток пытается создать экземпляр IP 1.1.1.1 и порта 1000 каждый раз, он получает один и тот же экземпляр, если он уже существует. (Один экземпляр для одного устройства.)

  • Автоматическое подключение

  • Конечный автомат для подключения и т. Д.

Каждый уникальный экземпляр имеет очередь отправки сообщений (из более высокого приложения) и имеет задачу / поток, который выполняется в цикле и проверяет, находится ли что-то в очереди для отправки, затем обрабатывает socket.send (если очередь не пусто). Если отправка прошла успешно или не удалась, ответьте обратным вызовом процессу, который добавил сообщение в очередь.

Я не уверен, что это хорошее решение - иметь для каждого уникального экземпляра задачу / поток, работающий в цикле. Представьте, что у меня 100 оконечных устройств (машин), и мое приложение из разных потоков отправляет данные на эти устройства.

Если у меня есть 100 устройств для связи, то у меня есть 100 уникальных экземпляров с 100 потоками / задачами, работающими в цикле и очередями обработки.

Приложение генерирует на одно из этих устройств (например, 50 запросов на отправку из разных верхних потоков) на целевое устройство с портом 70 IP 1.1.1.1. Мой уникальный класс для этого IP добавляет это в очередь сообщений и цикл потока этот экземпляр обрабатывает эти сообщения одно за другим. Верхний уровень просто получает обратный вызов, если socket.send () был в порядке или не удался.

Это хороший способ обработки многих соединений? Так же, как я получаю ответы от устройств. (Устройство является сервером.)

Что я знаю сейчас, так это то, что использование create new thread происходит быстрее, чем использование Task for loop в каждом случае. Лучше использовать прерывание по таймеру? Или как лучше всего обрабатывать входящие сообщения?

Есть ли какие-нибудь схемы, как это сделать?

...