Я использую простой js (без библиотеки) для реализации подключения к серверу (для сценария PERL). Посмотрев онлайн, я обнаружил, что в URL-адрес можно добавить пользовательские параметры следующим образом:
var ws=new WebSocket('wss://mydomain.com:9999/?UserID=329729');
Мой вопрос: как тогда в PERL NET :: WebSocket :: Server я могу обработать эту строку запроса, чтобы получить UserID в рукопожатии (если возможно)?
Net::WebSocket::Server->new(
listen => $ssl,
silence_max=>3600,
on_connect => sub {
my($serv,$conn)=@_;
$conn->on(
handshake => sub {
my($conn,$handshake)=@_;
# ???
},
);
}
)->start;
Любая помощь может быть оценена
В документации есть несколько примеров. Один из них использует событие handshake
следующим образом:
...
$conn->on(
handshake => sub {
my ($conn, $handshake) = @_;
$conn->disconnect() unless $handshake->req->origin eq $origin;
},
Следуя ссылкам на дополнительную документацию, вы можете видеть, что $handshake
в событии рукопожатия является объектом Protocol :: WebSocket :: Handshake :: Server, а метод (в настоящее время недокументированный) req
используемый в приведенном выше примере, вероятно, приводит к протоколу :: WebSocket :: Запрос объекта. В документации для этого класса упоминается недокументированный метод resource_name
но пример, предоставленный для этого класса, предполагает, что это компонент пути URL-адреса, то есть /?UserID=329729
в вашем конкретном вопросе.
Исходя из этого, я бы предположил, что следующее должно работать с вашим конкретным URL-адресом:
$conn->on(
handshake => sub {
my($conn,$handshake)=@_;
my ($id) = $handshake->req->resource_name =~m{\?UserID=(\d+)};