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