我有以下perl脚本,用于通过sinlge-tcp连接发送流水线http请求。第一个请求通过了,我能够得到响应。第二个reqeust也被发送,但没有收到对此请求的响应。我可以在跟踪中看到服务器上收到的两个请求。
use IO::Socket::INET;
$| = 1;
$socket = new IO::Socket::INET (
PeerHost => '10.102.218.56',
PeerPort => '80',
Proto => 'tcp',);
die "cannot connect to the server $!n" unless $socket;
print "connected to the servern";
# data to send to a server
my $req = "GET /test/file5.html HTTP/1.1rnHost:10.102.218.50rnAccept: */*rnrnrn";
my $size = $socket->send($req);
print "1. sent data of length $sizen";
$socket->recv($response, 1024);
print "received response: $responsen";
my $req = "GET /test/file5.html HTTP/1.1rnHost:10.102.218.50rnAccept: */*rnrnrn";
my $size = $socket->send($req);
print "1. sent data of length $sizen";
$socket->recv($response, 1024);
print "received response: $responsen";
sleep 1;
$socket->close();
在Apache access_log上,我只看到收到一个HTTP请求实例:
10.102.218.50 - - [02/Sep/2014:23:04:50 +0530] "GET /test/file5.html HTTP/1.1" 200 6 "-" "-"
我猜我遗漏了一些字符,这些字符表示服务器的HTTP请求结束。但是我找不到它们是什么。
我在这里做错了什么?
编辑:Apache服务器是否会在第一个HTTP请求得到响应后关闭连接。有这样的设置吗?
Edit2:KeepAlive在我的apache服务器上被设置为关闭。将其设置为ON可修复此问题。
发现问题。KeepAlive在我的Apache服务器上被设置为关闭。将KeepAlive设置为On解决了此问题。