Я разрабатываю новое клиент-серверное приложение (.Net) и до сих пор использую WCF, который прекрасно подходит для подхода к запросу приложения. Однако меня попросили заменить это на решение на основе сокетов, частично для поддержки клиентов, не являющихся клиентами, и будущих требований к публичным суб-вещам/вещам (я понимаю, что WCF способен, но есть и другие факторы, лежащие в основе решения). Провавшись неудачно при написании моего собственного решения асинхронного сокета, я теперь смотрю на ZeroMQ.
В моем клиентском приложении есть несколько фоновых потоков, которые периодически запрашивают данные с сервера. Кроме того, некоторые действия пользовательского интерфейса (например, нажатие кнопки) могут вызывать сообщение на сервере. WCF сделал это легко - код просто называется соответствующим методом на прокси-сервере Singleton WCF (на самом деле я использую средство WCW Castle Windsor, которое дает мне возможности асинхронного вызова, но это, вероятно, не имеет отношения к моему вопросу).
Я не слишком уверен, как этот подход переведёт на ZeroMQ, особенно в отношении управления сокетами - я очень новичок в ZeroMQ и все еще читаю руководство. Правильно ли я говорю, что мне понадобится отдельный сокет для каждого потока (т.е. Два потока b/g и пользовательский интерфейс)? Как насчет времени жизни сокета - создаем ли я каждый раз, когда я хочу отправлять/получать (предположительно неэффективно), или создавать сокет, когда поток запускается и повторно используется для всего жизненного цикла потока?