
之前有需求就是前端页面实时显示后端的收集到的最新信息,比如说通知啊,告警啊,
用的是 ajax 轮询, 后得知有更先进的方法是 websocket, 如是想学下 websocket,可在学习并查找资料的过程中, 发现目前线上用 websocket 的案例真是少之又少啊? 一般都是用的是轮询,比如说阿里巴巴的在线旺旺,QQ 邮箱上传大附件的时候, 等等,Why ?
不是说,websocket 是 html5 专门用来解决, 服务端向浏览器发送消息的么?是最新的方法么?解决老方法的各种弊端。
如果你发现有公网上用 websocket 的例子, 请列出来,告诉我。
2 veightz 2018年 11 月 12 日 可能是嫌麻烦。 如果是 http,原有服务自己的负载均衡就能直接 work 了。ws 与固定机器建连,讲道理还有前置搭个连接层, 就觉得先麻烦了。。。 之前内部活动做一个游戏后台,必须 websocket, 赶时间就直接上单机扛了。 |
3 shanliang 2018 年 11 月 12 日 有啊,v2ray 配合 websocket 走 cdn 翻墙,非常普遍了 |
4 Perry 2018 年 11 月 12 日 Firebase |
5 88250 2018 年 11 月 12 日 * GitHub Issue 评论还有操作等是 WS 实时刷新的 * 一些社区论坛系统也是 WS 的,回帖会后推送到其他开着同一个帖子的人那里,实时显示,比如黑客派 https://hacpai.com |
6 TuringGooner 2018 年 11 月 12 日 |
7 fe619742721 2018 年 11 月 12 日 做聊天基本都用啊 |
8 fy 2018 年 11 月 12 日 穿不透一些国内 cdn,用了之后回归轮询 |
9 NullException 2018 年 11 月 12 日 我自己的小站用了下 https://www.iluwen.com/home |
10 mewpoi 2018 年 11 月 12 日 via iPhone websocket 很多坑,如果只是单页面还好,涉及到多页面,定时推送,复杂的推送,就非常容易出问题了,不管是前端,还是服务端都会遇到很多很多问题 |
11 passerbytiny 2018 年 11 月 12 日 因为小业务时可以轮询救急,业务复杂后,又干脆直接找现成的推送框架了。 只要涉及到长连接的,就肯定要异步编程了,而常规 Web 应用的服务端,是完全的同步编程。从同步编程到异步编程,比从爬到走都难,所以基本都会用现成框架的。 |
12 ragnaroks 2018 年 11 月 12 日 应该是 CDN 的问题,不用 CDN 去抗的话直接打死你的 ws 服务器就嗝屁了, 另外可能还要考虑很多网站还在使用传统开发模式,或者说,能用为什么要换 |
13 ragnaroks 2018 年 11 月 12 日 另外 #11 提到一点也是,很多还在使用 web 做后端,我接触过一些已经改用 service(比如用 core.net 写个 consoleApp) 我自己也有一个项目就是用 C#写个 windows 服务,提供 ws 给网站(纯静态)使用,遇到一个非常麻烦的问题,用户一旦刷新网页就会退出登录状态(虽然这是没问题的),我又不能把 token 存在用户浏览器 |
14 xkeyideal 2018 年 11 月 12 日 websocket 是长连接,受网络限制比较大,需要处理好重连,比如用户进电梯或电信用户打个电话网断了,这时候就需要重连,如果 ws 一直重连不上,有些较复杂的业务方会不愿意的,是不是还要搞个 http 降级? 所以大部分不重要的业务,使用 ws 不如使用 http 轮训来的简单、实在。 ws 长连接的用户收到消息是个 push 操作,http 轮训用户收消息是 pull 操作,push 都存在单生产推多消费,为广播模型,怎么处理好连接,保障每个消费推且只推一次,很多程序员这个问题不一定能够解决。 pull 就不一样了,消费方想要你就来生产方拉一下,拉几次,消息就准确的送达几次,不存在多消费和连接处理的问题,缺点当然就是消息推送的不及时,优点非常明显,简单易实现。 websocket 当然也不是楼主说的没有用,企业内部业务系统之间有时候用 http 协议,又想要消息及时推送,上个 mq 太粗暴,用 grpc 这些支持双向流的 rpc 协议太复杂,此时 ws 就非常好使了。 本人在公司做过多个 ws 协议的服务端项目,使用体验非常不错,最头疼的当然就是断线重连的问题。 |
15 juneszh 2018 年 11 月 12 日 长连的资源消耗不比轮询低 |
17 a523 OP @passerbytiny ”现成的推送框架“ 求推荐 |
18 a523 OP @TuringGunner web 的后端是 python 比说说 django flask 能配合 socket. io 服务端使用吗? |
19 passerbytiny 2018 年 11 月 12 日 @a523 #16 我也没有推荐的,因为以前都是轮询救急的。我知道的都是非 Web 方式的的,比如说云推送、环信这些 APP 上用的,还有我自己做的,设备直接用 TCP 长连接的,Netty 自建。 |
21 ysc3839 2018 年 11 月 12 日 via Android 如果服务端用的是传统 PHP CGI 模式的话也无法支持 WebSocket。 你举的例子是因为开发时还没有 WebSocket,到了现在改用 WebSocket 太麻烦。 |
22 hsfzxjy 2018 年 11 月 12 日 via Android django channels 了解一下 |
23 fxxkgw 2018 年 11 月 12 日 网络直播弹幕是不是就是 ws ? |
24 param 2018 年 11 月 12 日 |
25 a523 OP |
26 watzds 2018 年 11 月 12 日 via Android 很多年了,我 14 年用过 |
27 gerrard000 2018 年 11 月 12 日 via iPhone 阿里网页版的钉钉用的就是 ws |
28 vanishcode 2018 年 11 月 12 日 via Android 轮训对于意外中断的处理比 ws 好吧(简单)肯定 |
29 rogwan 2018 年 11 月 12 日 via Android @a523 一些 web 应用不采用 ws 有一个原因是多页面重开,你想想,同时打开几十个淘宝页面就是几十个 ws 连接,这个比较难处理。不像客户端,登录一个可以踢掉另一个,在 web 上这种情况很普遍,轮询处理简单很多。 |
31 feverzsj 2018 年 11 月 12 日 因为 99%的业务场景只需要无状态的请求回复就可以了 |
32 frankkai 2018 年 11 月 12 日 via Android mqtt |
33 dszhblx 2018 年 11 月 12 日 via iPhone 看你做什么了,H 5 游戏,微信小游戏都是 ws,确切说是 wss |
34 kslr 2018 年 11 月 12 日 via Android 请使用英文关键词 不过这个东西比轮询复杂多了,量力而行 |
35 anonymous256 2018 年 11 月 12 日 via Android 我们就是 websocket 的, 用 python 和 golang 各一套实现。负责程序后端和用户界面交互~ |
36 514656282 2018 年 11 月 13 日 via iPhone 很少看到有人用 websocket 是怎样得出来的? |
39 a523 OP @gerrard000 谢谢提供信息, 我看了一下,网页版钉钉的确是 ws, 但不支持在多个页面登录, 登录第二个页面就把之前的给踢掉了 |
44 chifung408 2020 年 4 月 7 日 最近公司 php+vue 的项目使用了 socket.io,开发的时候时不时出问题,到了要上线部署了才发现不知道什么原因怎么连也连不上.最终都转成使用 WebSocket 才好好连上了.具体到现在还不知道什么原因 |