Я новичок в очередях обмена сообщениями, и сейчас я использую ZeroMQ
на моем Linux-сервере. Я использую PHP
для записи как клиента, так и сервера. Это в основном используется для обработки push-уведомлений.
Я использую базовый REQ
- REP
Формально-коммуникационный шаблон для отдельных экземпляров ZMQContext
с интерфейсом ввода/вывода, как они продемонстрировали.
Вот минимальный zeromqServer.php
код:
include("someFile.php");
$context = new ZMQContext(1);
// Socket to talk to clients
$responder = new ZMQSocket($context, ZMQ::SOCKET_REP);
$responder->bind("tcp://*:5555");
while (true) {
$request = $responder->recv();
printf ("Received request: [%s]\n", $request);
// -----------------------------------------------------------------
// Process push notifications here
//
sleep (1);
// -----------------------------------------------------------------
// Send reply back to client
$responder->send("Basic Reply");
}
И вот минимизированный ZeroMQ
клиент:
$context = new ZMQContext();
// Socket to talk to server
echo "Connecting to hello world server…\n";
$requester = new ZMQSocket($context, ZMQ::SOCKET_REQ);
$check = $requester->connect("tcp://localhost:5555");
var_dump($check);
$requester->send("json string payload with data required to process push notifications.");
//$reply = $requester->recv();
Итак, что я делаю? Я запускаю zeromqServer.php
в качестве фоновой службы, используя команду linux
nohup php zeromqServer.php &
Это выполняется как фоновый процесс. Теперь, когда клиент называет его, он выполняет требуемую работу.
Но проблема в том, что мне нужно перезапустить процесс каждый раз, когда есть изменения в любом из файлов (включая те include
-ed в файле zeromqServer
).
И более того, как-то через 2-3 дня он просто перестает работать. Процесс не останавливается, но он просто перестает работать.
Мне кажется, что это должна быть проблема сокета, возможно, сокет больше не открыт. В это время мне нужно перезапустить процесс zeromqServer.php
.
Q1:
В чем может быть проблема?
Q2:
И каков правильный способ сделать это?