<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
*{ margin: 0; padding: 0;}
body{ width: 960px; margin: 0 auto;}
ul{ list-style: none;}
#window_list{ width: 400px;}
#window_list li{
height: 80px;
border: 1px solid #000;
}
</style>
</head>
<body>
<p><input type="button" value="发起请求" id="go"/></p>
<ul id="window_list">
<li id="window_1"></li>
<li id="window_2"></li>
<li id="window_3"></li>
<li id="window_4"></li>
<li id="window_5"></li>
</ul>
<script type="text/javascript">
var window_list = document.getElementById('window_list').getElementsByTagName('li');
window_list.pointer = 0;
var url = 'http://www.xesam.com:8080/search?key=xe';
function urlParse(url){
var m = url.match(/(\w+):\/\/([\w.]+)(?::(\d+))?(\/[^?]+)?(?:\?(.*))?/);
var requestProtocol = m[1];
var domain = m[2];
var port = m[3] || 80;
var pathname = m[4] || '/';
var query = m[5] || '';
return {
requestProtocol:requestProtocol,
port : port,
domain:domain,
pathname:pathname,
query:query
}
}
function generateRequest(url){ //浏览器产生请求
DNS(urlParse(url).domain,url);//域名解析
}
var ipMap = {
'www.xesam.com' : server,
'www.xesam_1.com' : 'server_1'
}
function DNS(domain,url){
var server = ipMap[domain];//定位主机
establishConnection(server,url);//如果服务器确认,则建立连接
}
function establishConnection(server,requestUrl){
server(requestUrl);
}
var progressMap = {
http:function(request){
sleep(1000);//处理时间1s
server.requestQueen.out();
response(window_list[4 - server.requestQueen.getSize()]);
},
https:function(request){
server.requestQueen.out();
}
}
function server(requestUrl){
server.requestQueen.put(requestUrl);
var request = urlParse(requestUrl);
window_list[server.requestQueen.getSize() - 1].innerHTML = '分发请求!';
//分发请求
setTimeout(function(){
progressMap[request.requestProtocol](request);
},0)
}
function response(win){
win.innerHTML = '分发请求!<br />处理完成!';
}
server.requestQueen = new Queen();
function Queen(){
var queen = [];
this.put = function(el){
queen.push(el);
}
this.out = function(){
queen.shift();
}
this.getSize = function(){
return queen.length;
}
}
function sleep(time){
var start = (new Date()).getTime() + time;
while((new Date()).getTime() < start + time);
}
document.getElementById('go').onclick = function(){
for(var i = 0; i < 5; i++){
generateRequest(url);
}
}
</script>
</body>
</html>