如何在 Perl 中向连接的 Websocket 客户端发送定期消息

Vij*_*ati 5 perl nonblocking websocket

这个问题类似于 Python 的这个问题: WebSocket Server 定期在 python 中发送消息

在 Perl 中创建 WebSocket 的示例使用了一个小消息发送服务:http : //search.cpan.org/~topaz/Net-WebSocket-Server-0.001003/lib/Net/WebSocket/Server.pm

代码是:

use Net::WebSocket::Server;

my $origin = 'http://example.com';

Net::WebSocket::Server->new(
    listen => 8080,
    on_connect => sub {
        my ($serv, $conn) = @_;
        $conn->on(
            handshake => sub {
                my ($conn, $handshake) = @_;
                $conn->disconnect() unless $handshake->req->origin eq $origin;
            },
            utf8 => sub {
                my ($conn, $msg) = @_;
                $_->send_utf8($msg) for $conn->server->connections;
            },
            binary => sub {
                my ($conn, $msg) = @_;
                $_->send_binary($msg) for $conn->server->connections;
            },
        );
    },
)->start;
Run Code Online (Sandbox Code Playgroud)

此示例是基于事件的,并且仅根据从客户端发送的消息向客户端发送消息。如果我想向所有连接的客户端发送定期消息,那么这样做的好方法是什么?我可以创建一个在套接字服务器内触发的周期性事件,或者有没有办法创建一个连接到服务器并发送消息的 Perl 客户端,然后服务器将其广播出去?

小智 3

升级到Net::WebSocket::Server v0.3.0,它通过其“tick_period”参数和“tick”事件内置了此功能。请参阅下面的示例:

use Net::WebSocket::Server;

my $ws = Net::WebSocket::Server->new(
    listen => 8080,
    tick_period => 1,
    on_tick => sub {
        my ($serv) = @_;
        $_->send_utf8(time) for $serv->connections;
    },
)->start;
Run Code Online (Sandbox Code Playgroud)