Задать вопрос

Как и на чем лучше сделать архитектуру сервера, который держит соединение с клиентом?

Моему клиенту потребовалось одно десктопное приложение на шарпе, которое получает и обновляет у себя данные от json api раз в секунду. Я считаю, что это очень будет тяжело и для приложения и для апи, когда будет 1000 клиентов, и надо сделать серверную прослойку, которая будет с одной стороны потреблять апи и обновлять все у себя, а с другой стороны держать постоянное соединение с каждым клиентом и отправлять им самостоятельно только дифф по данным. Серверное ПО компания тоже обычно пишет на шарпе. В связи с этим очень эотелось бы услышать мнения:
1. Прав ли я в необходимости серверной прослойки?
2. На мой взгляд, для этого лучше использовать приложение на Go или Node.js, так ли это или неважно и на шарпе тоже будет нормально?
3. Если писать на шарпе, какой подход / компоненты лучше использовать, чтобы держать соединение и отправлять данные клиенту?
Заранее спасибо.
  • Вопрос задан
  • 1064 просмотра
Подписаться 6 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@huwesu
1. 1000 клиентов с обновлением раз в секунду - это 17 обменов в секунду. Смешная нагрузка. Низкая. У меня подтверждено замерами 5000 обменов в секунду на VDS с 512 М оперативы и одним ядром.

2. Лучше использовать то, что вы лучше всего умеете использовать. Для этой задачи - они все равны.

3. TCP
Ответ написан
@Ivankon
1. Мой сервер Дистанционной системы проектирования (написанный на C#) с поддержкой постоянного соединения с каждым клиентом, отправкой файлов после каждого сохранения держит не напрягаясь 10000 клиентов онлайн.
Характеристики сервера: Xeon 12 ядер, 64гига оперативы, WinServer 2012R2
2. Будет нормально работать на C# вполне, в плане серверных приложений он не уступает никому.
3. WCF с привязкой NetTcpBinding Duplex
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
Разумнее всего написать сервер на Go.
Но чтобы не плодить зоопарк возьмите https://github.com/sta/websocket-sharp и не парьтесь.
Ответ написан
Ваш ответ на вопрос

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

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