Я пытаюсь получить данные 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-> socket для хранения данных, но это, похоже, не работает.






Вы не можете этого сделать, нет. Сокеты, созданные с помощью методов socket_ *, не являются постоянными, поскольку они являются сокетами низкого уровня. И здесь две ваши функции выполняются в двух разных вызовах страниц, которые независимы друг от друга (так работает PHP).
Кроме того, то, что вы пытаетесь сделать прямо сейчас, - это сервер сокетов (привязка сокета обычно используется для серверных целей), а серверы сокетов должны быть постоянно открыты для получения данных. Я бы посоветовал вам попробовать создать программу CLI (это все еще можно сделать на PHP) и использовать методы socket_recvfrom и socket_sendto для получения и отправки ваших данных (после выполнения привязки), а затем сохранить полученные данные в базе данных или в файл, чтобы затем ваш веб-сайт прочитал из него и отправил его в ваш браузер. Вот руководство, которое показывает, как создать простой UDP-сервер на PHP..
Вам нужно будет, чтобы программа работала 24/7, игра отправляла данные вашей программе всякий раз, когда это необходимо, ваша программа сохраняла эти данные в базе данных (например), а затем ваш веб-сайт извлекал указанные данные из базы данных, когда люди обновляют Интернет. страница.
Хорошо, спасибо! Моя цель в конечном итоге состоит в том, чтобы люди на моем веб-сайте могли отправлять данные из своей игры на веб-сайт и иметь живую страницу с этими данными. Чтобы узнать, какое соединение принадлежит игре игроков, я подумал о назначении им случайного порта. Теперь: как мне запустить программу CLI, например, когда пользователь нажимает кнопку «Пуск» на веб-сайте? Или мне следует иметь программу, работающую круглосуточно и без выходных, которая обнаруживает «старт», а затем заставляет ее выполнять извлечение данных в цикле?