请教一个浏览器的 io 模型问题
譬如 tomcat8,底层的 io 模型由 bio 变成了 nio。那么前端浏览器是如何识别和处理的呢?
再比如我用 netty 写一个 http 服务器,那么浏览器可以直接连接并处理返回数据吗?
结合大家的回答,又查了一下相关资料,我觉得应该是我对 nio 的原理存在一些误解:浏览器 bio 发送数据和获取反馈,后端用 selector+channel 的方式进行应答,这就是单向 nio。
而 netty 使用示例里面 client 的示例代码实现的是双向 nio。
这两者都是 nio。 ----------------------- 以下是精选回复-----------------------
答:你这样改对浏览器应该都是透明的,bio 跟 nio 的区别是一个是堵塞( blocking ), 一个是非堵塞( non-blocking ),但是这个是不是堵塞都是对你服务器而言的。
浏览器看到的都是堵塞,即浏览器没有收到回应。
答:浏览器不关心,知道是 TCP 就行了
发明协议就是为了隐藏底层细节
答:前端不 care 你是 nio 还是 bio,是 select 还是 epoll。前端就是连接你服务器端口然后 tcp 会话,你 netty 也就是基于 select 模型不断去端口 poll 事件,为什么会跟浏览器有什么关系?
答:都是 HTTP,都是 TCP (目前),和实现无关
建议冷静思考
答:那别人也只好尊重你的“感觉”
我个人不打算花时间改变你的观点
答:后端服务用 nio 或者 netty 写,前端用 bio call 一点问题都没有。前端也根本不需要去考虑后端的 io 模型。
答:浏览器和 tomcat 之间的通讯是 http 协议。因此两者感觉不知道具体实现的。
tomcat 使用 nio/bio 性能并不能直接反应到业务上,更影响不到前端感知。
个人感觉只是表层地去观察,错觉而已。
建议分层去思考, 别把各种细节焊死了
答:和什么 io 没关系。客户端和服务端可以用两套完全不同的 io 模型,在 tcp 协议上不关心双端用什么。同样应用层不关心也没有协商对方用的什么,只要能接到响应就是好的
答:我作为一个做过一点前端并且翻过一点 WebKit 源码的人居然不知道浏览器里面有个叫 nio 的东西 ...
答:不管你后面是异步还是同步,浏览器都是无感知的啊,按照 http 协议交互即可,换个比方就是浏览器换成异步的 ajax,服务器端不需要进行处理一样。
0条评论