PHP Socket, как использовать протокол QUIC

У меня есть простой веб-сайт, размещенный на сервере. Я использую QUIC в качестве протокола, и все выглядит нормально:

https://ibb.co/qywqQkC

Теперь я написал на клиенте простой скрипт, который просто продолжает посылать пакеты на хост, используя php, но в wiresharks эти пакеты отправляются через UDP вместо QUIC.

Любое предложение о том, как изменить и на самом деле использовать QUIC?

https://ibb.co/J78B3zw

Это скрипт на клиенте

$server = 'X.X.X.X';
$port = 443;


$controllerSensors = new ControllerSensors();
$controllerSensors->createSensor("Sensore Bologna", "Temperatura", $server, $port, 1);
$controllerSensors->createSensor("Sensore Modena", "Temperatura", $server, $port,4);
$controllerSensors->createSensor("Sensore Reggio", "Umidità", $server, $port,8);
$controllerSensors->runAllSensors();

Запустить сценарий All Sensons:

            if(!($this->socket = socket_create(AF_INET, SOCK_DGRAM, 0))){
                $errorcode = socket_last_error();
                $errormsg = socket_strerror($errorcode);
                die("Couldn't create socket: [$errorcode] $errormsg \n");
            }
          if( ! socket_sendto($this->socket, $input , strlen($input) , 0 , $this->ip , $this->port)){
                $errorcode = socket_last_error();
                $errormsg = socket_strerror($errorcode);
                die("Could not send data: [$errorcode] $errormsg \n");
            }

И, наконец, серверный скрипт:

$ip = "0.0.0.0";
$port = "443";

error_reporting(~E_WARNING);
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0))){
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Couldn't create socket: [$errorcode] $errormsg \n");
}

// Bind the source address
if( !socket_bind($sock, $ip , $port) ){
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);
    die("Could not bind socket : [$errorcode] $errormsg \n");
}

while(true){
    $messageRecieved = "";
    $r = socket_recvfrom($sock, $messageRecieved, 512, 0, $remote_ip, $remote_port);        
    echo $messageRecieved . "<br>";
}

Разве этот сценарий не должен использовать QUIC для данных, отправляемых вместо UDP, поскольку веб-сайт использует QUIC? Я тоже пытался спросить о поддержке моего веб-сервера, но они сказали, что это должно быть хорошо, но я все еще не могу использовать Quic. PS: когда я загружаю сайт в wireshark, я ясно вижу протокол QUIC, в то время как данные все еще отправляются через UDP

Спасибо, Дэвид.

1 ответ

Разве этот сценарий не должен использовать QUIC для данных, отправляемых вместо UDP, поскольку веб-сайт использует QUIC?

Скрипт использует то, что вы ему указываете - это простой UDP-сокет дейтаграммы. QUIC - это далеко не тривиальный протокол поверх UDP, поскольку HTTP является протоколом поверх TCP.

Он не используется волшебным образом, если вы подключаетесь к серверу, поддерживающему QUIC - столько, сколько HTTP не используется волшебным образом, если вы подключаетесь с помощью TCP к серверу, поддерживающему HTTP. Вместо этого вы должны фактически использовать реализацию протокола в вашем приложении. Вкратце, я не вижу существующей реализации QUIC для PHP. Но вы можете попытаться реализовать его самостоятельно, следуя этому черновому документу длиной 135 страниц (QUIC еще не является стандартом) и, возможно, дополнительно этому черновику длиной 48 страниц, который описывает HTTP поверх QUIC.

Другие вопросы по тегам