为什么很少看到有人用 websocket?

2018-11-12 11:51:27 +08:00
 a523

之前有需求就是前端页面实时显示后端的收集到的最新信息,比如说通知啊,告警啊,

用的是 ajax 轮询, 后得知有更先进的方法是 websocket, 如是想学下 websocket,可在学习并查找资料的过程中, 发现目前线上用 websocket 的案例真是少之又少啊? 一般都是用的是轮询,比如说阿里巴巴的在线旺旺,QQ 邮箱上传大附件的时候, 等等,Why ?

不是说,websocket 是 html5 专门用来解决, 服务端向浏览器发送消息的么?是最新的方法么?解决老方法的各种弊端。

如果你发现有公网上用 websocket 的例子, 请列出来,告诉我。

20480 次点击
所在节点    问与答
44 条回复
agagega
2018-11-12 12:20:35 +08:00
你可以试试 Socket.io ,封装了 WebSocket,如果不支持可以自动 fallback 到轮询
veightz
2018-11-12 13:29:30 +08:00
可能是嫌麻烦。 如果是 http,原有服务自己的负载均衡就能直接 work 了。ws 与固定机器建连,讲道理还有前置搭个连接层, 就觉得先麻烦了。。。 之前内部活动做一个游戏后台,必须 websocket, 赶时间就直接上单机扛了。
shanliang
2018-11-12 13:45:53 +08:00
有啊,v2ray 配合 websocket 走 cdn 翻墙,非常普遍了
Perry
2018-11-12 13:47:49 +08:00
Firebase
88250
2018-11-12 13:51:19 +08:00
* GitHub Issue 评论还有操作等是 WS 实时刷新的
* 一些社区论坛系统也是 WS 的,回帖会后推送到其他开着同一个帖子的人那里,实时显示,比如黑客派 https://hacpai.com
TuringGunner
2018-11-12 13:56:22 +08:00
我们公司就用的 socket.io

一般有实时数据要求的会考虑 websocket 吧
fe619742721
2018-11-12 14:00:21 +08:00
做聊天基本都用啊
fy
2018-11-12 14:03:08 +08:00
穿不透一些国内 cdn,用了之后回归轮询
NullException
2018-11-12 16:37:51 +08:00
我自己的小站用了下
https://www.iluwen.com/home
mewpoi
2018-11-12 16:46:34 +08:00
websocket 很多坑,如果只是单页面还好,涉及到多页面,定时推送,复杂的推送,就非常容易出问题了,不管是前端,还是服务端都会遇到很多很多问题
passerbytiny
2018-11-12 16:50:40 +08:00
因为小业务时可以轮询救急,业务复杂后,又干脆直接找现成的推送框架了。

只要涉及到长连接的,就肯定要异步编程了,而常规 Web 应用的服务端,是完全的同步编程。从同步编程到异步编程,比从爬到走都难,所以基本都会用现成框架的。
ragnaroks
2018-11-12 16:51:40 +08:00
应该是 CDN 的问题,不用 CDN 去抗的话直接打死你的 ws 服务器就嗝屁了,
另外可能还要考虑很多网站还在使用传统开发模式,或者说,能用为什么要换
ragnaroks
2018-11-12 16:55:39 +08:00
另外 #11 提到一点也是,很多还在使用 web 做后端,我接触过一些已经改用 service(比如用 core.net 写个 consoleApp)
我自己也有一个项目就是用 C#写个 windows 服务,提供 ws 给网站(纯静态)使用,遇到一个非常麻烦的问题,用户一旦刷新网页就会退出登录状态(虽然这是没问题的),我又不能把 token 存在用户浏览器
xkeyideal
2018-11-12 17:03:23 +08:00
websocket 是长连接,受网络限制比较大,需要处理好重连,比如用户进电梯或电信用户打个电话网断了,这时候就需要重连,如果 ws 一直重连不上,有些较复杂的业务方会不愿意的,是不是还要搞个 http 降级?

所以大部分不重要的业务,使用 ws 不如使用 http 轮训来的简单、实在。

ws 长连接的用户收到消息是个 push 操作,http 轮训用户收消息是 pull 操作,push 都存在单生产推多消费,为广播模型,怎么处理好连接,保障每个消费推且只推一次,很多程序员这个问题不一定能够解决。
pull 就不一样了,消费方想要你就来生产方拉一下,拉几次,消息就准确的送达几次,不存在多消费和连接处理的问题,缺点当然就是消息推送的不及时,优点非常明显,简单易实现。

websocket 当然也不是楼主说的没有用,企业内部业务系统之间有时候用 http 协议,又想要消息及时推送,上个 mq 太粗暴,用 grpc 这些支持双向流的 rpc 协议太复杂,此时 ws 就非常好使了。

本人在公司做过多个 ws 协议的服务端项目,使用体验非常不错,最头疼的当然就是断线重连的问题。
juneszh
2018-11-12 17:03:42 +08:00
长连的资源消耗不比轮询低
a523
2018-11-12 17:38:04 +08:00
@agagega 服务端, 我只会 python 语言用啥? js 会一点但不擅长,Socket.io 是不是得用 node.js 做后端?
a523
2018-11-12 17:39:00 +08:00
@passerbytiny ”现成的推送框架“ 求推荐
a523
2018-11-12 17:41:44 +08:00
@TuringGunner web 的后端是 python
比说说 django flask 能配合 socket. io 服务端使用吗?
passerbytiny
2018-11-12 17:46:32 +08:00
@a523 #16 我也没有推荐的,因为以前都是轮询救急的。我知道的都是非 Web 方式的的,比如说云推送、环信这些 APP 上用的,还有我自己做的,设备直接用 TCP 长连接的,Netty 自建。
a523
2018-11-12 17:49:08 +08:00
@agagega 什么情况下会不支持 websocket ? 指老一点的浏览器版本吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/506933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX