Я пытаюсь выяснить, есть ли у меня две подпрограммы, вызывающие один и тот же сокет zeromq, если при возврате из socket.recv() в процедуре 1 возвращается. Сокет будет знать, чтобы вернуться в подпрограмма1 (то же самое для рутинных2, ... рутин).ZeroMQ знает, какой из подпрограмм запрашивается от
Следовательно ... используя шину обмена сообщениями с семантикой запроса/ответа, каков наилучший образец для подхода к этому в go?
Если это помогает ... подумать о простой схеме пирата и реализовать вызов стиля RPC, установленный в этом шаблоне с помощью zeromq.
Socket; //zeromq socket
//routine 1
socket.send(data) // do i need some identifier here for this routine?
socket.recv() // wait until i get a response from that send
//routine 2
socket.send(data)
socket.recv()
так что в этом случае я понятия не имею, будет ли возвращаться ответ от обычной1 или обычной2. Как я могу убедиться, что когда я получаю ответ на сокет ... я могу сообщить о правильной функции recv() функции.
Спасибо!
Просьба предоставить больше кода, или, по крайней мере, более полно конкретизирован, например. Вы намерены сделать это в одном потоке или нескольких потоках? Какие типы сокетов вы используете как на этом (клиент?) Конце, так и на одноранговом узле, с которым вы отправляете сообщения? Как вы подключаетесь/связываетесь? Что отличает одну «рутину» от другой «подпрограммы» в вашем коде/данных? В зависимости от ответов на эти вопросы существует любое количество возможных решений. – Jason
У меня есть нулевой опыт/знание ZeroMQ, но в прошлом, когда у меня было несколько goroutines, делающих запросы по общему сетевому ящику, у меня была центральная goroutine, где запросы, где на самом деле написаны, и ответы читаются. Эта функция имела входной канал ({запрос, канал ответа)), карту выдающихся идентификаторов запросов (сгенерированных последовательно) и только что использовал эту карту для поиска соответствующего канала для отправки тела ответа (или для регистрации и удаления это, если не было записи карты). –
Ну, у меня нет опыта/знаний о Go, так что мы не делаем пару :). Если вы еще не прочитали [The Guide] (http://zguide.zeromq.org/page:all), я настоятельно рекомендую вам это сделать, в документе есть всевозможные примеры по всему документу (всякий раз, когда вы видите пример кода , будет ссылка на версию на разных языках, с быстрым взглядом, похоже, что большинство из них имеют вариант Go). Вероятно, вы увидите, что вы пытаетесь сделать, и посмотрите пример этого. – Jason