【问题标题】:Websocket with authentication serial with js and perl带有 js 和 perl 的身份验证串行的 Websocket
【发布时间】:2018-01-04 22:32:24
【问题描述】:

我正在使用纯 js(无库)来实现到服务器的 websocket 连接(到 PERL 脚本)。 在网上看了一下发现可以在URL请求中添加自定义参数如下:

var ws=new WebSocket('wss://mydomain.com:9999/?UserID=329729');

我的问题是:那么如何在 PERL 的 NET::WebSocket::Server 中处理此查询字符串以在握手中检索用户 ID(如果可能的话)?

Net::WebSocket::Server->new(
    listen => $ssl,
    silence_max=>3600,
    on_connect => sub {
        my($serv,$conn)=@_;
        $conn->on(
            handshake => sub {
                my($conn,$handshake)=@_;

                # ???



            },
        );
    }
)->start;

任何帮助都可以理解

【问题讨论】:

    标签: javascript perl authentication websocket


    【解决方案1】:

    the documentation 中有多个示例。其中之一使用handshake 事件,如下所示:

        ...
        $conn->on(
            handshake => sub {
                my ($conn, $handshake) = @_;
                $conn->disconnect() unless $handshake->req->origin eq $origin;
            },
    

    通过指向more documentation 的链接,您可以看到握手事件中的$handshake 是一个Protocol::WebSocket::Handshake::Server 对象,而上面示例中使用的(当前未记录的)req 方法可能会导致一个Protocol::WebSocket::Request 对象.此类的文档提到了一个未记录的 resource_name 方法,但为此类提供的示例表明,这是 URL 的路径组件,即您的特定问题中的 /?UserID=329729

    基于此,我建议以下内容适用于您的特定网址:

        $conn->on(
            handshake => sub {
                my($conn,$handshake)=@_;
                my ($id) = $handshake->req->resource_name =~m{\?UserID=(\d+)};
    

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 2017-07-26
      • 2021-10-16
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-05
      • 2021-10-04
      • 1970-01-01
      相关资源
      最近更新 更多