gpt4 book ai didi

javascript - Websocket 和 Perl CGI

转载 作者:行者123 更新时间:2023-11-30 17:23:12 24 4
gpt4 key购买 nike

我对CGI编程有点陌生,我想做一个在线聊天API但遇到了不少麻烦:

我在网上寻找解决方案,找到了用于客户端 (js) 的 Websocket 和用于 perl 的 HTTP::Daemon,但我不知道从哪里开始让服务器监听来自浏览器的连接。

这是我的 JavaScript 代码:

ws = new WebSocket('ws://www.crazygao.com:3000'); // test
ws.onopen = function() {
alert('Connection is established!'); // test
};
ws.onclose = function() {
alert('Connection is closed');
};
ws.onmessage = function(e) {
var message = e.data;
//alert('Got new message: ' + message);
};
ws.onerror = function(e) {
//var message = e.data;
alert('Error: ' + e);
};

这是我的 Perl 脚本测试代码:

use HTTP::Daemon;
use HTTP::Status;

my $d = HTTP::Daemon->new(
LocalAddr => 'www.crazygao.com',
LocalPort => 3000
) || die; print "Please contact me at: <URL:", $d->url, ">\n";
while(my $c = $d->accept) {
$c->send_response("1"); # test
while (my $r = $c->get_request) {
if ($r->method eq 'GET') {
$c->send_response("...");
}
}
$c->close;
undef($c);
}

当页面加载时,连接立即关闭,并且在 Chrome 控制台窗口中我看到以下错误:与“ws://198.38.89.14:3000/”的 WebSocket 连接失败:连接建立时出错:net::ERR_CONNECTION_REFUSED

我手动运行 perl 脚本(使用对 http://example.com/cgi-bin/xxx.cgi 的简单调用),然后当我刷新页面时,我得到:与“ws://198.38.89.14:3000/”的 WebSocket 连接失败:WebSocket 握手期间出错:意外的响应代码:200

我知道服务器通常在 OK 时返回 200,但是 Websocket 正在等待 101 代码作为“OK”。

我的问题是,如果是这样,我该如何实现?

最佳答案

我知道这是旧的,我来到这里是因为我自己正在寻找答案。我最终通过使用 Net::WebSocket::Server 自己找到了答案。

http://search.cpan.org/~topaz/Net-WebSocket-Server-0.003004/lib/Net/WebSocket/Server.pm有关如何使用该模块和示例的更多详细信息。

基本上,您将拥有此 perl 代码以匹配您的 javascript(从 Net::WebSocket::Server 的 CPAN 页面复制和修改):

use Net::WebSocket::Server;

my $origin = 'http://www.crazygao.com';

Net::WebSocket::Server->new(
listen => 3000,
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;

关于javascript - Websocket 和 Perl CGI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24777418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com