Laravel 5 — PHP несколько процессов, запущенных одновременно

У меня есть проблема, я понятия не имею, как подойти … У меня работает два процесса — один из них слушает сообщения, сортирует их и преобразует их, а другой процесс выполняет другие функции управления и отправляет обычные сообщения плюс преобразованные … Как мне объединить все это в один скрипт?

class Sender {
private $messageQueue;

public function run() {
// open stream
while (true) {
$this->send($this->messageQueue->pop());
if ($this->lastMessageTimestamp + 20 < time) {
$this->keepalive();
}
}
// close stream
}

public function pushMessage(Message $message) {
$this->messageQueue->push($message);
}

private function send(Message $message) {
// send through stream
$this->lastMessageTimestamp = time();
}

private function keepalive() {
$this->messageQueue->push(new KeepAliveMessage());
}
}

Суть в том, что отправитель должен открыть соединение и поддерживать его, отправляя живые сообщения каждые 20 (плюс дополнительные не упомянутые вещи), и выскакивает другие сообщения, которые были переданы ему извне через pushMessage.

class Listener {
public function run() {
while(true) {
$message = $this->listen();
$this->messages->push($message);
$this->processMessages();
}
}

private function processMessages() {
// processing logic, sorting, comparing, analyzing, transforming
$this->echo(Message $processedMessage);
}

public function echo(Message $processedMessage) {
return $processedMessage;
}
}

В то время как слушатель также выполняет прослушивание (возможно, чтение из файла) для других видов сообщений, затем обрабатывает их и формирует правильное сообщение для отправителя.

Моя проблема состоит в том, чтобы объединить все это в одну функциональность, где я мог бы запустить обе неблокирующие друг друга (вилки? Обратные вызовы?), Где я мог бы передать обработанное сообщение от слушателя отправителю для отправки, не блокируя при этом ни слушателя, ни отправителя делают во время бега ….

Любая помощь (псевдокод хорош) будет принята …

(Все это выполняется из команды Laravel, но это не очень важно)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]