2016-01-16 2 views
2

У меня есть приложение, которое связывается через websocket с моим сервером. Я использую Ratchet, и все работает отлично. Следующее, что я хочу реализовать, - это сделать запросы на другой сервер и направить ответы через websocket на клиентов. Мой вопрос - как реагировать на параллельные запросы. Скажем, у меня есть 5 конечных точек, ответ которых я хочу получить параллельно (поток). Я хочу, например, называть каждую конечную точку каждые .2s и отправлять ответ на серверы серверов websocket. Например (это только демонстрационный код):PHP реагирует на параллельные запросы

$server->loop->addPeriodicTimer(.2, function ($timer) { 
    curl('endpoint1'); 
}); 

$server->loop->addPeriodicTimer(.2, function ($timer) { 
    curl('endpoint2'); 
}); 

$server->loop->addPeriodicTimer(.2, function ($timer) { 
    curl('endpoint3'); 

}); 

Но этот таймер не работает таким образом. Можно ли даже добиться этого, чтобы реагировать?

Я не показываю код веб-памяти, потому что общение между клиентами работает хорошо.

+0

Поскольку вам нужно, чтобы эти страницы загружались каждые 0,2 секунды, можно было бы соединить эти страницы с вашим веб-сайтом и всякий раз, когда эти страницы будут обновляться, чтобы отправить обновление на все необходимые ему подключения? – mitchken

ответ

0

Для начала. "Реакт (Ratchet)" - работают в режиме одного потока (функция libevent). То есть, все, что заблокирует процесс - плохая идея ... Запрос Curl - остановит работу сервера сокета до получения ответа.

Для вашего применения - я бы использовал ZMQ. Дело заключается в следующем:

  • запустить рабочий процесс (например: ZMQWorker),
  • сервер посылает завиток-данные на ZMQWorker (через ZMQ).
  • ZMQWorker отправить запрос скручивание
  • после отправки запроса, ZMQWorker отправить ответ на WebSocket (через ZMQ). Это вы можете получить через reactphp/zmq

Если вам нужно отправить много одновременных запросов - Вам потребуется PTHREAD библиотека - это обеспечивает многопоточность.

Я также слышал, что можно обеспечить работу pthread + libevent, но лично я этого не делал.

P.S Но использование архитектуры ZMQ, вы получаете распределенную архитектуру, с тем же масштабируемым!

Смежные вопросы