浏览器或者一般HTTP客户端组件为某一个服务器端点(域名 端口)保留4-6条活跃TCP连接 。你可以F12观察浏览器 , 看看同时是几个请求阻塞了就知道你的浏览器设置的多少 。比较大的门户网站 , 比如京东 , 首页请求非常多 , 但是大量都需要排队等TCP空闲 。限制客户端的连接数量的出发点主要是性能 , 否则会占用服务器太多Socket资源(考虑socket预留的读写缓冲区 , windows的内核对象或者linux的文件句柄)或者变相地造成DoS攻击 。
Tips:HTTP客户端组件一般会提供诸如ConnectionLimit的选项让你控制最大TCP连接数 。如果你是桌面客户端 , 或者请求远程服务 , 不宜设置过大 。如果你是内部服务之间调用 , 可以根据需求合理设置以增加并发性能 。HTTP2.0针对以上的问题(主要是性能)做了很多改进 , 这个也会提高很多人在后端不同服务器之间做通信时选择HTTP(我在HTTP2.0出来之前就是自己设计RPC方案) 。
详细的HTTP2.0的东西 , 这里不展开了 , 详细参考官方文档 。HTTP相关知识推荐《HTTP权威指南》以及相关的RFC文档 , 尽量少去看博客上面支离破碎的小知识 , 体系化的认知结构对你帮助更大 。WebSocketWebSocket的出现 , 就是为了解决http协议不支持双向通信的缺口 。所以WebSocket的握手协议就是使用的HTTP消息来Upgrade 。
现代的Web场景 , 服务端推送的需求非常大 , 这个发展过程中使用的Ajax轮询 , Comet等都只是临时解决方案 , 从设计上看 , 只为满足需求 , 一点都不优雅 。Html5规范将WebSocket纳入后 , 得到了现代几乎所有浏览器的支持 , 当然IE(10 才支持)仍然是一个巨坑 , 在乎用户覆盖面的产品依然要通过浏览器是否支持ws来做出降级处理(轮询、长连接) 。
websocket协议实现独占一条tcp通道 , 它负责从tcp流确定消息边界 , 解析出每个独立的消息包 。可进行全双工的双向通信 。题主所谓的WebSocket可以实现持久连接 , 只是的一个服务端WebSocket会话和对应的客户端WebSocket会话在使用一个固定的保持连接的TCP通信而已 。一般需要将服务端WebSocket会话和某位用户关联起来(客户单连接后 , 可以再单独发送凭证验证) , 实现给某个用户推送消息 , 只需根据关联找到对应的WebSocket会话调用发送API即可 。
应用使用单独实现websocket协议的服务\客户端组件 , 可以更加轻松地实现自定义协议:在websocket的二进制或者文本消息体内或者直接使用websocket的自协议定义机制封装自己定义的协议 。推荐大家如果有些需要自建IM服务器 , 推送服务器的场合尝试先用WebSocket来实现 。负载高(协议头消耗小) , 协议简洁 , 几乎所有客户端(减少了大量的工作)都有对应的开源项目可用 , 同时还是唯一可以在浏览器上用的双向通信协议(flash和silverlight等插件方式除外) 。
如果你要用websocket实现请求应答式的子协议 , 要点是你要设计唯一的请求标志 , 响应也将请求标志带回来 , 然后你就可以从客户端的请求队列中查找响应对应的请求将响应交给上层处理!特别注意:关于webcket持久连接 , 本质上是下层tcp连接的保持 , 核心问题同样是如何保活 。需要考虑Nat失效(基站最突出 , 一般有效期只有3分钟)或者其它网络原因导致大量半连接存在 。
- 求t2大神告知这是什么情况
- 蓝月传奇战士pk带什么英雄,法师传奇小说全文在线阅读
- 高清完整正版视频在线观看,微微视频
- 赛尔号玄武怎么骑,蜘蛛纸牌游戏在线玩
- 龙城之怒的法师怎么玩,法师维迦小说全文在线阅读
- 镇魔曲网页版什么时候测试,什么时候可以加入军队
- 在线等,求各位教一下
- 起名字测试打分,蒙青青名字怎么样
- 在线教学听课评价量表设计原创,试论如何进行课时备课
- "二手emi测试仪",二手EMI测试仪
