Привязать сокет и recvfrom в отдельных функциях - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь получить данные UDP из игры. И обновлять его на странице постоянно. Использование JSON для извлечения данных из функции.

Можно ли отделить socket_create / socket_bind от socket_recvfrom?

(я вырезал из него ненужный код)

private $socket;

public function socketConnect($port)
{

    $ip = '0.0.0.0'; // local IP
    $port = 20777; // port to listen

    $this->socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    socket_bind($this->socket, $ip, $port) or die("Could not connect");

   return view('telemetry');
}

public function getData()
{
   while (socket_recvfrom($this->socket, $buf, $bytes, 0, $remote_ip, $remote_port)) {
      // do something
      return response()->json($data);
    }
}

Я пытался установить сокет $ this-> для сохранения данных, но это не сработало.

1 Ответ

0 голосов
/ 29 августа 2018

Вы не можете этого сделать, нет. Сокеты, созданные с помощью методов socket_ *, не являются постоянными, поскольку они являются сокетами низкого уровня. И здесь две ваши функции выполняются в двух разных вызовах страницы, которые не зависят друг от друга (так работает PHP).

Более того, то, что вы сейчас пытаетесь сделать, - это сервер сокетов (обычно привязка сокета для серверных целей), и серверы сокетов должны быть постоянно открыты для получения данных. Я бы посоветовал вам попробовать создать программу CLI (которую все еще можно выполнить на PHP) и использовать методы socket_recvfrom и socket_sendto для получения и отправки данных (после выполнения привязки). ), а затем сохраните полученные данные в базе данных или в файле, чтобы затем ваш сайт прочитал их и отправил в браузер. Вот руководство, показывающее, как создать простой сервер UDP в PHP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...