专栏首页Java架构沉思录三分钟构建高性能WebSocket 服务

三分钟构建高性能WebSocket 服务

作者:Yeauty
原文:https://my.oschina.net/u/3580577/blog/2088114

前言

每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket)。它可以让我们使用注解,很简单的进行Websocket开发,让我们更多的关注业务逻辑。它底层使用的是Tomcat,且不说把整个Tomcat放进一个WebSocket服务中是否会太重,但在大数据量高并发的场景下,它的表现并不是非常理想。

Netty是一款高性能的NIO网络编程框架,在推送量激增时,表现依然出色。(关于性能与表现的讨论,网上很多,这里不过多说明。)很多流行开源项目都在使用Netty,如:Dubbo、Storm、Spark、Elasticsearch、Apache Cassandra等,这得益于Netty的并发高、传输快、封装好等特点。

但是,要在SpringBoot项目中整合Netty来开发WebSocket不是一件舒服的事,这会让你过多的关注非业务逻辑的实现。那么,是否有一款框架,能使得在SpringBoot项目中使用Netty开发WebSocket变得简单,甚至优雅,并且可以从使用spring-boot-starter-websocket开发的项目无缝的迁移过来呢?

netty-websocket-spring-boot-starter

这是个开源的框架。通过它,我们可以像spring-boot-starter-websocket一样使用注解进行开发,只需关注需要的事件(如OnMessage)。并且底层是使用Netty,当需要调参的时候只需要修改配置参数即可,无需过多的关心handler的设置。

快速入门

  • 创建SpringBoot项目(v2.0.0以上)并添加依赖:
  • new一个ServerEndpointExporter对象,交给Spring容器,表示要开启WebSocket功能:
  • 在端点类上加上@ServerEndpoint、@Component注解,并在相应的方法上加上@OnOpen、@OnClose、@OnError、@OnMessage注解(不想关注某个事件可不添加对应的注解):
  • 一个高性能的WebSocket服务端就完成了,直接run起来就可以了。

测试

  • 服务端是写完了,接下来需要测试一下,看看效果
  • 首先,新建一个html文件,把页面撸出来
  • 页面撸完,直接用Chrome打开上面html文件即可连上你的WebSocket服务。

总结

这个框架是基于Netty的,所以直接使用Netty优化时的理念即可。如:堆外内存的0拷贝、接收及发送缓冲区的调整、高低写水位的调整等。

生产环境的项目在充分调优后,Netty甚至能比Tomcat高效20倍。(当然,这是特定的场景下)

框架详细文档:

  • https://github.com/YeautyYE/netty-websocket-spring-boot-starter

本文分享自微信公众号 - Java架构沉思录(code-thinker)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 记一段 Kotlin 处理 HashMap 数据结构的代码

    一个会写诗的程序员
  • 蔚来汽车市值超过450亿!创始人李斌身价暴涨,腾讯成大赢家

    蔚来汽车这家公司,可能很多人都没有听过。不过不要紧,我可以慢慢的跟你说。蔚来汽车成立不到四年时间,创始人是李斌,这位老兄是一个连续的成功创业者。李斌先后已经有三...

    光荣与梦想1987
  • Android-.9图详解

    Android设备适配,图片方面很重要的一部分就是.9图的使用了,我们今天就来记录一下。

    android_薛之涛
  • 美团、小米和拼多多强势崛起!移动互联网进入MMP时代

    MMP是美团、小米和拼多多的简称,是移动互联网时代崛起的三家公司。在今年上半年,小米和拼多多相继上市。截止到目前,拼多多的市值约为220亿美金,相当于1508亿...

    光荣与梦想1987
  • 台风“山竹”正式登陆广东,美团和饿了么暂时停止外卖服务

    9月16日,被广大网友称为最强台风的“山竹”正式登陆广东。广东全省进入防风I级应急响应状态,深圳、广州、江门、阳江等多个城市“停工、停业、停市、停课”,广深多个...

    光荣与梦想1987
  • 【常见错误】--Nltk使用错误

    AttributeError: module 'nltk' has no attribute 'word_tokenize'

    LhWorld哥陪你聊算法
  • 你有一份高效学习组合法待查收

    PICK 是一款在手机端帮助你告别拖延症的效率工具,依托番茄钟的科学理论,加上趣味激励、清单打卡、好友监督等方式,让你随时随地给自己设定个小目标之后,踏踏实实的...

    效率软件专家
  • 最优雅效率软件即将在appstore上线

    效率软件专家
  • AgileRepository - 一个基于接口的Repository快速开发库

    这是一个可以帮助你快速开发Repository的lib。有点像SpringData JPA根据方法名、注解来自动生成查询方法的功能。 对于一些简单的查询,只需...

    kklldog
  • 趣头条市值超过300亿人民币!腾讯又成为大赢家

    近日,又有一家中国互联网公司在美国上市了。按照业内人士的说法,2018是中国互联网公司的“大年”,一堆创业公司相继上市,比如虎牙直播、拼多多等,现在轮到了趣头条...

    光荣与梦想1987

扫码关注云+社区

领取腾讯云代金券