简单的Perl WebSocket客户端

4

我正在尝试用Perl编写一个简单的WebSocket客户端:

use Protocol::WebSocket::Client;

my $client = Protocol::WebSocket->new(url => 'ws://myserver:port');

# Sends a correct handshake header
$client->connect;

# Register on connect handler
$client->on(
    connect => sub {
        $client->write('hi there');
    }
);

# Parses incoming data and on every frame calls on_read
$client->read($reply);
print "$reply\n";

# Sends correct close header
$client->disconnect;

正如Protocol::WebSocket::Client文档所示,但我收到了以下消息:
Can't locate object method "new" via package "Protocol::WebSocket" at ./webSocketClient.pl.

我做错了什么?


由于您需要尝试很多次才能使其正常工作,也许您应该考虑其他选择。https://metacpan.org/pod/AnyEvent::WebSocket::Client 看起来很有前途。 - simbabque
1
这个模块的作者给我发了电子邮件,内容是:“我想发表评论,但是我没有足够的声望或者叫什么名字。这里有一个好的客户端示例。” - Borodin
2个回答

7

Protocol::WebSocketWebSocket 协议的低级实现。它不包含发送/接收数据的代码;它只解析协议消息。

您可能需要查看使用 Protocol::WebSocket 与各种模块的示例,请参见 examples。一个很好的客户端示例是在附带此模块的 wsconsole 实用程序中实现的。

CPAN 上有几个高级模块实现了 WebSockets 并隐藏了所有低级细节,其中大多数使用了 Protocol::WebSocket。请看一下 AnyEvent::WebSocket::ClientNet::Async::WebSocket::Client


3

这个示例代码中有一个错误。Protocol::WebSocket->new 应该改为 Protocol::WebSocket::Client->new


很棒的发现。你打算修复它并发起一个PR吗? - simbabque
2
@simbabque:我已经给作者发了电子邮件。但是我不会提交修复,因为即使进行了更正,示例仍然存在问题,而且我不清楚如何修复它。 - Borodin
我明白了。文档最多也只是简略的介绍而已。 - simbabque
1
@simbabque:没错。我应该澄清一下,所谓的“破损”是指不完整。它有像...get non-blocking socket......do smth with read data...这样的东西,这些都会导致它无法编译。我已经十年没有做过套接字编程了,如果我试图填补这些空白,很可能会出错。 - Borodin
以上代码在Windows上给我报错:“无法在C:/Strawberry/perl/site/lib/Protocol/WebSocket/Client.pm的第103行使用未定义值作为子例程引用。” - P_Z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接