首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

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

  •  2
     
  •   a523 · 341 天前 · 11795 次点击
    这是一个创建于 341 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    第 1 条附言  ·  341 天前
    bilibili 貌似也是用的轮询, 没有 ws ,可以按 F12 查看
    第 2 条附言  ·  341 天前
    不是说“ HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术”?,
    我很难找到国内知名网站用这个的,所以我想了解下是不是这 websocket 技术本身的原因。还是?
    42 回复  |  直到 2019-09-28 21:43:13 +08:00
        1
    agagega   341 天前 via iPhone
    你可以试试 Socket.io ,封装了 WebSocket,如果不支持可以自动 fallback 到轮询
        2
    veightz   341 天前
    可能是嫌麻烦。 如果是 http,原有服务自己的负载均衡就能直接 work 了。ws 与固定机器建连,讲道理还有前置搭个连接层, 就觉得先麻烦了。。。 之前内部活动做一个游戏后台,必须 websocket, 赶时间就直接上单机扛了。
        3
    shanliang   341 天前
    有啊,v2ray 配合 websocket 走 cdn 翻墙,非常普遍了
        4
    Perry   341 天前
    Firebase
        5
    88250   341 天前
    * GitHub Issue 评论还有操作等是 WS 实时刷新的
    * 一些社区论坛系统也是 WS 的,回帖会后推送到其他开着同一个帖子的人那里,实时显示,比如黑客派 https://hacpai.com
        6
    TuringGunner   341 天前
    我们公司就用的 socket.io

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

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

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

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

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

    本人在公司做过多个 ws 协议的服务端项目,使用体验非常不错,最头疼的当然就是断线重连的问题。
        15
    juneszh   341 天前
    长连的资源消耗不比轮询低
        16
    a523   341 天前
    @agagega 服务端, 我只会 python 语言用啥? js 会一点但不擅长,Socket.io 是不是得用 node.js 做后端?
        17
    a523   341 天前
    @passerbytiny ”现成的推送框架“ 求推荐
        18
    a523   341 天前
    @TuringGunner web 的后端是 python
    比说说 django flask 能配合 socket. io 服务端使用吗?
        19
    passerbytiny   341 天前
    @a523 #16 我也没有推荐的,因为以前都是轮询救急的。我知道的都是非 Web 方式的的,比如说云推送、环信这些 APP 上用的,还有我自己做的,设备直接用 TCP 长连接的,Netty 自建。
        20
    a523   341 天前
    @agagega 什么情况下会不支持 websocket ? 指老一点的浏览器版本吗?
        21
    ysc3839   341 天前 via Android
    如果服务端用的是传统 PHP CGI 模式的话也无法支持 WebSocket。
    你举的例子是因为开发时还没有 WebSocket,到了现在改用 WebSocket 太麻烦。
        22
    hsfzxjy   341 天前 via Android
    django channels 了解一下
        23
    fxxkgw   341 天前
    网络直播弹幕是不是就是 ws ?
        24
    param   341 天前
        25
    a523   341 天前
    @hsfzxjy
    @param
    嗯, 这些都了解,疑惑的是像国内( QQ 邮箱上传附件显示进度,阿里旺旺网页版)这些知名网站为什么没用这些技术, 不是说“ HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术”?,
    我也很难找到国内知名网站用这个的,所以我想了解下是不是这 websocket 技术本身的原因。
        26
    watzds   341 天前 via Android
    很多年了,我 14 年用过
        27
    gerrard000   341 天前 via iPhone
    阿里网页版的钉钉用的就是 ws
        28
    vanishcode   341 天前 via Android
    轮训对于意外中断的处理比 ws 好吧(简单)肯定
        29
    rogwan   341 天前 via Android   ♥ 1
    @a523 一些 web 应用不采用 ws 有一个原因是多页面重开,你想想,同时打开几十个淘宝页面就是几十个 ws 连接,这个比较难处理。不像客户端,登录一个可以踢掉另一个,在 web 上这种情况很普遍,轮询处理简单很多。
        30
    bjfane   341 天前
    看什么产品,非固定浏览器,Socket.io 还是可以的。
        31
    feverzsj   341 天前
    因为 99%的业务场景只需要无状态的请求回复就可以了
        32
    frankkai   341 天前 via Android
    mqtt
        33
    dszhblx   341 天前 via iPhone
    看你做什么了,H 5 游戏,微信小游戏都是 ws,确切说是 wss
        34
    kslr   341 天前 via Android
    请使用英文关键词
    不过这个东西比轮询复杂多了,量力而行
        35
    anonymous256   341 天前 via Android
    我们就是 websocket 的, 用 python 和 golang 各一套实现。负责程序后端和用户界面交互~
        36
    514656282   340 天前 via iPhone
    很少看到有人用 websocket 是怎样得出来的?
        37
    a523   337 天前
    @514656282 按 F12
        38
    a523   337 天前
    @rogwan 好像有道理, 阿里网页版的钉钉是用的 ws, 然后我另开一个页面, 就会提醒我登录, 登录之后, 就会把之前的给踢掉。
        39
    a523   337 天前
    @gerrard000 谢谢提供信息, 我看了一下,网页版钉钉的确是 ws, 但不支持在多个页面登录, 登录第二个页面就把之前的给踢掉了
        40
    xjbeta   330 天前
    @fxxkgw
    虎牙 b 站 熊猫 直播弹幕都是用的 websocket
    斗鱼 是 socket
    只有企鹅电竞是 1 秒 1 个网络请求
        41
    xjbeta   330 天前
    @xjbeta 斗鱼准确来说 开放 API 文档 接入用的 socket
    本身用的什么不是很清楚
        42
    wyx119911   21 天前 via Android
    @a523 老邮箱十几年前的产品了,使用的是长轮询技术。新邮箱今年刚上线,需要微信注册,使用 ws 推送技术。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   824 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 21:59 · PVG 05:59 · LAX 14:59 · JFK 17:59
    ♥ Do have faith in what you're doing.