请教下关于 websocket 的使用

本贴最后更新于 1997 天前,其中的信息可能已经水流花落

大概需求是,浏览器一打开页面,就连上 websocket,等待有新消息到来(只读不写),服务器有新消息的话,就向全体在线的浏览器发送消息(只写不读)。

我后端是使用 golang,用了 gorilla/websocket 这个包,参考了他的 chat 的例子,他的大概思路就是把每个连接保存到一个列表,然后有消息时,遍历一下这个列表然后挨个发送(https://github.com/gorilla/websocket/blob/master/examples/chat/hub.go#L43-L50)。我想请问下这种写法会不会有效率方面的问题,如果连接数很多呢?

以前没接触过 websocket,所以不太了解具体该怎么写,Google 了一下没找到太好的参考。

请教大家,websocket 的应用有没有什么 best practice?

似乎是为数不多的使用了 websocket 的社区(还是有其他的我没发现,介绍下?),站长能否介绍下使用情况。

PS:我怎么没有找到回帖的地方,每次看帖,都找不到回帖的按钮?

  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    492 引用 • 1384 回帖 • 365 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 389 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • leedstyh
    作者

    轮询是浏览器每隔一段时间主动向服务器发送请求,看有新数据没。缺点是:1)如果没有新数据,那也会发起一个请求。2)如果有新数据,服务器也不会立刻发送给浏览器,需要浏览器自己来问,不是真的 realtime。

    websocket 是浏览器和服务器建立一个连接之后不断开,服务器有新的数据了,立刻发送给浏览器。

  • 其他回帖
  • 88250

    轮询是客户端发起的 HTTP 请求。

    1 回复
  • 88250 1 赞同

    ping/pong 我以前查的时候记得结论是浏览器不一定实现: [Wide] 里面虽然也自定义了 ping/pong 不过好像实际上并没有什么作用 😂

    另外黑客派的链接会时不时断开这个问题的确存在,并且重连时确实就是报的你说的这个错(暂停重连),等有空我好好排查一下,初步估计是 NGINX 代理 WebSocket 时的超时设置有问题。

    另外,

    1. JS 客户端重连用的是这个库 ReconnectingWebSocket
    2. Wide 是一个 golang 的 Web IDE,WebSocket 部分用的也是 grilla 库,可能对你参考价值更大一些

    总之,有什么成果记得分享哦 😄

  • meikaiyipian

    @ 话说,手机端是不是也用的 websocket,只是模板不同?

    1 回复
  • 查看全部回帖
leedstyh
Talk is cheap, show me the money! 沈阳

推荐标签 标签

  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 424 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 51 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 6 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 3 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 456 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 198 关注
  • danl
    75 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 700 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    51 引用 • 226 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 593 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 691 关注
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖 • 1 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖 • 1 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖
  • gRpc
    10 引用 • 8 回帖 • 55 关注
  • 笔记

    好记性不如烂笔头。

    305 引用 • 780 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    85 引用 • 1201 回帖 • 450 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    27 引用 • 66 回帖 • 1 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    276 引用 • 685 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 291 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • 自由行
    3 关注