Как соединить rabbitmq и ratchet?
===================================

 Хотелось бы реализовать такую логику - хотелось бы иметь сокет который принимает соединения(назову его sockListen, для простоты дальнейших разъяснений), и все входящие сообщения отправляет в брокер rabbitmq, так же будут отдельные процессы(p1,p2,p3) которые буду подключатся к rabbitmq, доставать оттуда сообщения как то обрабатывать и отдавать назад клиенту. Проблема возникает на последнем этапе, а именно в отдаче данных назад клиенту. То есть, будет клиент который подключается к сокету sockListen по протоколу ws, и после подключения отправляет данные по этому соединению, обработчик sockListen будет брать ip клиента, и его сообщение и отправлять в rabbitmq. Процессы p1,p2,p3 должны будут вытаскивать все сообщения из rabbitmq как то обрабатывать и каждому клиенту отправлять его назад. Так вот, как мне передать данные назад клиенту с определенным ip, при условии что у него уже есть подключение по ws? 

 А что, рэтчет не предполагает наличие индивидуального соединения с юзером? Я использую центрифугу и там есть опция, при которой можно отправить в канал конкретному пользователю индивидуальное сообщение, и этот канал строится из имени неймспейса и канала (namespace#channel), где канал - id юзера. Зачем соединяться именно по айпи, разве для неавторизованных пользователей тоже будут уведомления? 

 Можно разделять клиентов на сессии, и работать в рамках сессий. Смотря какие у вас требования к авторизации, выбираете нужную библиотеку или реализацию у конкретного фреймворка, и используя идентификатор сессии отсылаете по нужному подключению.  
  

В самом общем простом случае, для определения сессии достаточно токена с IP, guid/порядковый id и временем создания токена/подключения по ws.   
  

1) клиент подключается по ws  

2) генерируется токен  

3) кладется в сообщение для очереди воркера  

4) воркер consume & works  

5) возрващается результат работы с токеном  

6) компонент вашей системы, который держит подключение с клиентом (socketListen), выбирается по токену, и шлёт его по ws  

7) ...  

8) Profit, но с оговорками, что либо генерировать токен на стороне клиента (плохая идея), либо разграничивать 1 socketListener на 1 ws подключение (так себе идея , потому что можно делать так: [socketo.me/docs/sessions](http://socketo.me/docs/sessions) )  
  

P.S. вопрос не совсем по rabbitmq, а совсем по Websockets php Ratchet) 

 Не много поменяли логику, но подключение все равно будет одно, без push серверов и прочего. Всем спасибо кто участвовал. 

 Ratchet при подключении клиента имеет id соединения с ним. В простейшем случае, когда только один процесс Ratchet, можно использовать этот идентификатор для маркировки задания в пул и возврата результат работы.  

Но это плохо масштабируется, поэтому конечно было бы корректнее иметь привязку к session token (очевидно придется прикрутить какой-то middleware). Этот компонент должен иметь информацию о том, к какому процессу подключен сейчас юзер с session token. Очевидно потребуется Redis или типа того, чтобы был общий доступ из разных процессов Ratchet.