服务器如何处理http请求
1需求
了解服务端如何处理http请求,了解基本的处理流程
2实战
处理http请求分为7个步骤
21 Tcp连接
建立一条tcp链接,(若之前不存在持久链接keep-alive),把客户端的ip和port,服务端的ip和port数据放到web服务器连接表中。服务器随时监听链接表中的链接,看有没有数据变化
22 接收http请求
一旦我们发送http请求了,这条tcp链接就开始工作了。因为web服务器链接表中有许多链接需要被处理,处理的方式有单线程,多线程这些(这些涉及操作系统的知识)。
23 处理http请求
处理的过程大致是把请求的信息解析出来,如下图
24 访问资源
访问资源可以是访问静态资源,这个就直接根据url地址去服务器里找就好了。
访问动态资源的话要经过一个叫cgi的东西,再用服务端脚本处理,再返回给前端。如下图所示
25 构建响应
要是找到资源,则构建响应信息,包括响应的对象类型,长度,状态码。
另一个情况是重定向响应,就是直接返回一个重定向,客户端看到之后,立刻再向重定向的地址发起请求。重定向的响应的状态码一般是3xx。
26 发送响应
把构建的响应发送给客户端
27 记录日志
服务端对这个请求响应过程进行记录。(另外专门再讲)
3总结
以上是服务端处理http请求的大致过程。能让大家有个大致轮廓,当然里面有很多细节的知识没讲到,要另外查询资料并学习
HTTP是无状态的
也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话
HTTP11和HTTP10相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http10 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。
如果浏览器或者服务器在其头信息加入了这行代码
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。
实现长连接要客户端和服务端都支持长连接。
所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,
所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接
短连接:比如
http
的,只是连接、请求、关闭,过程时间较短
,
服务器若是一段时间内没有收到请求即可关
闭连接。
长连接:有些服务需要长时间连接到服务器,比如
CMPP
,一般需要自己做在线维持。
最近在看
“
服务器推送技术
”
,在
B/S
结构中,通过某种
magic
使得客户端不需要通过轮询即可以得到服务
端的最新信息(比如股票价格)
,这样可
以节省大量的带宽。
传统的轮询技术对服务器的压力很大,
并且造成带宽的极大浪费。如果改用
ajax
轮询,可以降低带宽的负荷
(因为服务器返回的不是完整页面)
,
但是对服务器
的压力并不会有明显的减少。
而推技术(
push
)可以改善这种情况。但因为
HTTP
连接
的特性(短暂,必须由客户端发起)
,使得推技术的实现比较困难,常见的做法是通过延长
http
连接的寿
命
,
来实现
push
。
接下来自然该讨论如何延长
http
连接的寿命
,
最简单的自然是死循环法
:
servlet
代
码
片
段
public
void
doGet(Request
req,
Response
res)
{
PrintWriter
out
=
resgetWriter();
……
正
常
输
出
页
面
……
outflush();
while
(true)
{
outprint("
输
出
更
新
的
内
容
");
outflush();
Threadsleep(3000);
}
}
如果使用观察者模式则可以进一
步提高性能。
但是这种做法的缺点在于客户端请求了这个
servlet
后,
web
服务器会开启一个线程执行
servlet
的代码,而
servlet
由迟迟不肯结束,造成
该线程也无法被释放。于是乎,一个客户端一个线程,
当客户端数量增加时,服务器依然会承受很大的负担。
要从根本上改变这个现象比较复杂,目前的趋
势是从
web
服务器内部入手,用
nio
(
JDK
14
提出的
javanio
包)改写
request/response
的实现,再利
用线程池增强服务器的资源利用率,从而解决这个问题,目前支持这一非
J2EE
官方技术的服务器有
Glassfish
和
Jetty
(后者只是听说,没有用过)
网没问题 游戏问题 用以下方法可以登录点桌面开始-----运行 ---在打开里 输出 你游戏目录:如 D:\网络游戏\寻仙\QQLoginexe -g 602819011:3100
附赠IP
电信:
广东区:
11914716136:3100,葫芦山
11914716144:3100,沙子洲
11914720103:3100,锦绣林
119147438:3100,宁阳观
江苏区
2227377211:3100,钱宁河
2227377235:3100,天枢观
2227373180:3100,兰陵道
上海区
2227377227:3100,喇叭口
2021026067:3100,仙君阁
西南区
11812323458:3100,落雁坡
11812323470:3100,虎跳峡
浙江区
2227377231:3100,东坡林
2021026066:3100,混水洞
湖北区
11914716140:3100,黄石岗
福建区
11914716148:3100,盘陀岭
西北区
11812323466:3100,不周山
四川区
11812323462:3100,白龙湖
118123234123:3100,两界山
11812323517:3100,玉峰山
安徽区
2021026035:3100,紫岚山
湖南区
11914720132:3100,七星山
广西区
11914720141:3100,九曲湾
江西区
2227377215:3100,玉华山
华南区
119147442:3100,晓月庄
1191472099:3100,碧波潭
华中区
119147446:3100,观星台
华东区
2227373200:3100,东山岛
网通:
北京区
6028234169:3100,凌霄殿
602819041:3100,通天河
华北区
6028234230:3100,白云洞
602819025:3100,小君观
125395210:3100,五宁宫
602819017:3100,五丈坡
东北区
6028189250:3100,黎阳道
602819021:3100,摩云山
602818964:3100,黑风岭
602819037:3100,龙吟湾
河南区
602819013:3100,青濡口
山东区
602819029:3100,蓬莱岛
0条评论