有了 websocket 还需要普通 http 连接么?

似乎都使用 websocket 进行数据传输也无不可?

阅读 6.5k
5 个回答

内事不觉问维基,外事不觉问谷歌

https://zh.wikipedia.org/wiki...

Websocket不同于Http,但是Websocket经常是在Http上实现,与http协议兼容。

感觉你的问题是,已经有了一个websocket长连接后,还需要再起一个http连接通讯否?
这个需要看你的具体需求了,websocket做成一个全双工通讯,在websocket连接完成所有通许,这样做没问题,但是可能耦合性比较大。反正websocket主要做复杂长连接通讯,一些周边支线通讯、不需要维护状态的通讯用http连接去做,减少了系统耦合度,简化通讯模型,肯定是利大于弊的。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

可以完全基于 websocket。

但是

  1. abort 需要你自己实现了,
  2. success 和 error 也需要你自己实现的了。
  3. timeout 也需要你自己实现了

等等很多东西都无了。昂,对了,鉴权也是一个其他的方式。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

知乎上这个老哥直接点明了这个问题的本质:

是问“WebSocket能否完全替代HTTP作为前后端通信协议么?”
如果是这样的话,这个问题可以转换为另一个问题:“双向通信能否完全替代单向通信?”
答案是显然的,绝对没问题!

https://www.zhihu.com/questio...

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

这个其实涉及具体应用情况,而不是简单的不是这个就是那个的问题。

  1. 本身websocket很多实现其实是基于http的,其服务搭建和http服务搭建没有本质区别,只是应用层面的差异。
  2. 应用本身环境限制,有可能一些应用可以完全基于websocket,但并不是所有的。
  3. 即使是数据层面,或者说纯技术支撑的角度,可能二者服务能力也不同,要根据应用需求不同来适配。

总之,很多技术栈是有背景的,脱离了具体的背景去谈意义不大,而且信息技术中是没有银弹的。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

新手上路,请多包涵

这么说吧,websocket可以理解是原生tcp的替代品,简化了很多tcp的协议约定,端序,粘包拆包之类的操作;http1.1 是建立在tcp基础上的,稳定传输重试之类的,只不过是单向的。websocket在http2之前是为了解决http单向传输而生的。所以从演进和功能上也可以看出来,当然还需要http。

websocket的握手是使用http协议进行,所以websocket/http之间不存在替代的关系。而http2是支持双向传输的,所以还需不需要 websocket 倒是个问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进