之前有需求就是前端页面实时显示后端的收集到的最新信息,比如说通知啊,告警啊,
用的是 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 才好好连上了.具体到现在还不知道什么原因
|