PHP反应并行请求

时间:2016-01-16 01:31:39

标签: php multithreading websocket ratchet

我有一个应用程序通过websocket与我的服务器进行通信。我正在使用Ratchet,一切都很完美。我想要实现的下一件事是向其他服务器发出请求,并通过websocket将响应推送到客户端。我的问题是如何通过反应提出并行请求。假设我有5个端点响应我想要并行(线程)。我想以每个.2s为例调用每个端点,并向websocket服务器客户端发送响应。例如(这只是演示代码):

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

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

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

});

但是这个计时器不能这样工作。是否有可能通过反应实现这一目标?

我没有显示websocket代码,因为客户端之间的通信运行良好。

1 个答案:

答案 0 :(得分:0)

开始。 “ React(Ratchet)” - 以一种线程模式运行(功能libevent)。也就是说,任何阻止进程的东西 - 糟糕的主意......卷曲请求 - 将停止工作套接字服务器,直到它收到响应。

对于您的应用程序 - 我会使用 ZMQ 。 重点是:

  • 您运行工作进程(例如:ZMQWorker),
  • 您的服务器在 ZMQWorker 上发送curl-data(通过ZMQ)。
  • ZMQWorker 发送Curl请求
  • 发送请求后, ZMQWorker WebSocket 发送响应 (通过ZMQ)。你可以通过 reactphp / zmq
  • 获得

如果您需要发送大量并发请求 - 您需要 pthread 库 - 它提供多线程。

我也听说有可能提供pthread + libevent工作,但我个人并没有这样做。

P.S 但是使用架构ZMQ,你得到的是分布式架构,同样可扩展!