【发布时间】:2014-09-06 18:47:20
【问题描述】:
我在 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 控制台窗口中我看到以下错误: WebSocket 连接到“ws://198.38.89.14:3000/”失败:连接建立错误:net::ERR_CONNECTION_REFUSED
我手动运行 perl 脚本(使用对 http://example.com/cgi-bin/xxx.cgi 的简单调用),然后当我刷新页面时,我得到: WebSocket 连接到“ws://198.38.89.14:3000/”失败:WebSocket 握手期间出错:意外响应代码:200
我知道服务器通常在正常时返回 200,但 Websocket 正在等待 101 代码为“OK”。
我的问题是,如果是这样,我怎样才能做到这一点?
【问题讨论】:
标签: javascript perl websocket