У меня есть система, в которой мне нужно двунаправленное соединение между клиентом и сервером. В некоторых случаях клиенту необходимо инициировать связь с сервером, чтобы задать вопрос, запросить статус, получить некоторые данные и т. Д. {У нас есть система ИИ, которая выполняет повторяющиеся задачи, мониторинг, формирование отчетов, оповещение и т. Д. И клиентские приложения, позволяют нам взаимодействовать с сервером.} В других случаях сервер должен сообщать о некоторых изменениях в статусе или предупреждать клиента. Мы используем .NET для реализации системы и рассмотрели несколько различных архитектур:
A) Откройте канал TCP и управляйте связью на низком уровне. Это, кажется, отвечает нашим потребностям, но было довольно нестабильным, в первую очередь потому, что нашим командам не хватает хорошего опыта в низкоуровневых коммуникационных протоколах.
B) Использовать удаленное взаимодействие .NET, в котором обе системы выступают в качестве хоста - клиент регистрирует сервер в качестве удаленного хоста, и после установления соединения сервер продолжает работу и регистрирует клиента в качестве удаленного хоста в разностном канале. , Похоже, что это нормально работает для базовых сообщений, но есть случаи, когда нам нужно поддерживать «диалог» между клиентом и сервером. Наличие нескольких клиентов под этой архитектурой кажется немного сложным.
C) Забудьте о двунаправленной связи и используйте архитектуру опроса для опроса сервера на наличие новых сообщений - работает нормально, но создает чрезмерно болтливую систему и усложняет «разговоры» между клиентом и сервером.
Есть мысли о лучшем подходе? Любые другие подходы рекомендуется?