Neuroware
@Neuroware
Программист в свободное от работы время

Как создать клиент сервер на C# с «Alive» подключением?

Нужно написать клиент сервер с поддержанием "живых" сессий, то есть примерно такой архитектуры:
Сервер:
  • Должен быть много поточным
  • Должен принимать и не закрывать соединения от клиентов
  • Отдельный поток на сервере должен иметь возможность "перечислить" подключенных клиентов и отправить произвольный byte[] любому из них, не закрывая после соединение
  • Должен принимать byte[] от клиентов и уметь определять от кого из клиентов получено сообщение
Клиент:
  • Должен подключаться к серверу и не закрывать соединение
  • Должен уметь отправлять сообщение byte[] серверу и получать от него сообщения в том же соединении

Пробовал реализовать с udp сокетами и remoting, оно работает и достаточно быстро, но получился в итоге гиганского размера костыль, такое решение мне не нравится чисто эстетически.
Все примеры с tcp сокетами подходят для временных подключений, которые закрываются сразу после передачи и не пригодны для удержания сессий и постоянного взаимодействия. Как лучше было бы подобное реализовать?
  • Вопрос задан
  • 2451 просмотр
Пригласить эксперта
Ответы на вопрос 1
RyzhovAlexandr
@RyzhovAlexandr
люблю .NET, интересуюсь также Java, BigData
Есть еще альтернатива WCF duplex, но у него есть ряд особенностей, которые нужно учитывать:
1. Для использования через http требует создания отдельного обратного канала, поэтому лучше использовать net.tcp
2. Для поддержания открытых обратных каналов необходимо вручную реализовать пинг

Обидно, что для такой, казалось бы типовой задачи Microsoft не дал удобный механизм из коробки, wcf но все равно приходится подкручивать и доводить до ума
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы