前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三分钟构建高性能WebSocket 服务

三分钟构建高性能WebSocket 服务

作者头像
Bug开发工程师
发布2018-11-08 17:53:50
1.6K0
发布2018-11-08 17:53:50
举报
文章被收录于专栏:码农沉思录
代码语言:javascript
复制
作者: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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农沉思录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • netty-websocket-spring-boot-starter
  • 快速入门
  • 测试
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档