Solon 也是 SSE(Server Send Events)后端开发的优选
Solon 2.3.6 在开发异步接口时,顺带也为 Solon Web 提供了 SSE (Server-Sent Events) 协议的支持插件:
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.web.sse</artifactId>
</dependency>
如果不熟 SSE 的,可以通过搜索引擎查询了解下。//个人还是感觉 ws 更方便用:)
使用示例
按群里用户的要求,体验方式尽量采用大家熟悉的命名与风格。
@Controller
public class SseDemoController {
static Map<String, SseEmitter> emitterMap = new HashMap<>();
@Mapping("/sse/{id}")
public SseEmitter sse(String id) {
//3000L 是后端异步超时
return new SseEmitter(3000L)
.onCompletion(() -> emitterMap.remove(id))
.onError(e -> e.printStackTrace())
.onInited(s -> emitterMap.put(id, s)); //在 onInited 里,可以发消息(初始化完成之前,是不能发消息的)
}
@Mapping("/sse/put/{id}")
public String ssePut(String id) {
SseEmitter emitter = emitterMap.get(id);
if (emitter == null) {
return "No user: " + id;
}
String msg = "test msg -> " + System.currentTimeMillis();
emitter.send(new SseEvent().id(Utils.guid()).data(msg).reconnectTime(1000L));
return "Ok";
}
@Mapping("/sse/del/{id}")
public String sseDel(String id) {
SseEmitter emitter = emitterMap.get(id);
if (emitter != null) {
emitter.complete();
}
return "Ok";
}
}
注意事项
- 这个插件可能需要把线程数调大些
#服务 http 最小线程数(默认:0表示自动,支持固定值 2 或 内核倍数 x2)
server.http.coreThreads: 0
#服务 http 最大线程数(默认:0表示自动,支持固定值 32 或 内核倍数 x32)
server.http.maxThreads: 0
更多配置可参考:《应用常用配置说明》
- 关于超时的说明
超时是指服务端的异步超时,默认为 30000L(即30秒)。其中,0L 代表默认,-1L代表不超时。
- 提高连接数
要用好,后端超时、前端重连时间以及线程数配置。
Solon 是什么开源项目?
一个,Java 新的生态型应用开发框架。它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态)。与其他框架相比,它解决了两个重要的痛点:启动慢,费资源。
解决痛点?
由于Solon Bean容器的独特设计,不会因为扩展依赖变多而启动很慢(开发调试时,省时、爽快)!以知名开源项目“小诺”为例:
- “snowy-spring 版” 启动 30-50秒
- “snowy-solon 版” 启动3-5秒,内存省了1/3(有兴趣的,欢迎拉取代码体验)
所谓:“时间就是生命,效率就是金钱”,“天下武功,唯快不破”。
相对于 Spring Boot 和 Spring Cloud 的项目,有什么特点?
- 启动快 5 ~ 10 倍。 (更快)
- qps 高 2~ 3 倍。 (更高)
- 运行时内存节省 1/3 ~ 1/2。 (更少)
- 打包可以缩小到 1/2 ~ 1/10;比如,300Mb 的变成了 23Mb。 (更小)
- 同时支持 jdk8, jdk11, jdk17, jdk20, graalvm native
项目仓库地址?
Solon 也是 SSE(Server Send Events)后端开发的优选的更多相关文章
- Play Framework, Server Sent Events and Internet Explorer
http://www.tuicool.com/articles/7jmE7r Next week I will be presenting at Scala Days . In my talk I w ...
- springmvc 中开发Server Send Event
springmvc 中开发Server Send Event 学习了:http://blog.csdn.net/leiliz/article/details/55195203 https://www. ...
- server sent events
server sent events server push https://html5doctor.com/server-sent-events/ https://developer.mozilla ...
- 【转】网页游戏能用PHP做后端开发吗? PHP Libevent扩展安装及应用
网页游戏能用PHP做后端开发吗? 当然可以.最好走HTTP,也可以做网络编程,而且写代码超简单,1个函数就可以建一个服务器端.stream_socket_server()多线程不是什么好主意,你可以用 ...
- 同事内推的那位Linux C/C++后端开发同学面试没过......
最近同事内推了一位 Linux C/C++ 后端开发的同学到我们公司面试,我是一面的面试官,很遗憾这位工作了两年的同学面试表现不是很好.我问了如下一些问题: "redis持久化机制,redi ...
- 招聘前端、Java后端开发、测试、Mysql DBA
公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史
---新内容开始--- 番外 大家周一好呀,又是元气满满的一个周一呀!感谢大家在周一这个着急改Bug的黄金时期,抽出时间来看我的博文哈哈哈,时间真快,已经到第十四篇博文了,也很顺顺(跌跌)利利 (撞撞 ...
- hi-nginx-1.4.9正式发布,支持javascript后端开发
hi-nginx-1.4.9已经发布. 更新: 支持javascript后端开发 修复脚本搜索的一个bug 从这一版开始,hi-nginx开始支持javascript,这意味着把javascript应 ...
- ABP开发框架前后端开发系列---(2)框架的初步介绍
在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...
- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...
随机推荐
- Redis 源码解析之通用双向链表(adlist)
Redis 源码解析之通用双向链表(adlist) 概述 Redis源码中广泛使用 adlist(A generic doubly linked list),作为一种通用的双向链表,用于简单的数据集合 ...
- this关键字,static以及子类访问父类super关键字
1.this是用来指代当前类实例化对象 public setid(id){thiis.id = id;} 即将传入的形参id赋值给当前类的id属性 2.this还可以调用方法,方法分为两种构造方法和普 ...
- 生产事故-走近科学之消失的JWT
入职多年,面对生产环境,尽管都是小心翼翼,慎之又慎,还是难免捅出篓子.轻则满头大汗,面红耳赤.重则系统停摆,损失资金.每一个生产事故的背后,都是宝贵的经验和教训,都是项目成员的血泪史.为了更好地防范和 ...
- .NET周报 【4月第3期 2023-04-15】
国内文章 Semantic Kernel 入门系列: Planner 规划器 https://www.cnblogs.com/xbotter/p/semantic_kernel_introductio ...
- Python_13 接口测试openpyxl和表操作
一.openpyxl 安装 pip install openpyxl 在Terminal中输入 excel操作步骤 找到目标excel 打开 读取数据.编辑excel单元格 保存 关闭 open ...
- Nginx常用配置及和基本功能讲解
作者:京东物流 殷世杰 Nginx已经广泛应用于J-one和Jdos的环境部署上,本文对Nginx的常用的配置和基本功能进行讲解,适合Nginx入门学习. 1 核心配置 找到Nginx安装目录下的co ...
- C# 获取系统已安装的.NET版本
获取系统已安装的.NET版本,来确定当前应用可运行的环境. 微软已经有相应的完整文档,请参考:确定已安装的 .NET Framework 版本 - .NET Framework | Microsoft ...
- Windows屏幕解锁服务原理及实现(1)
https://github.com/zk2013/windows_remote_lock_unlock_screen 将生成的DLL注册至注册表 HKEY_LOCAL_MACHINE\SOFTWAR ...
- 2022-09-22:以下go语言代码输出什么?A:5、B:不能编译;C:运行时死锁。 package main import ( “fmt“ “time“ ) func main
2022-09-22:以下go语言代码输出什么?A:5.B:不能编译:C:运行时死锁. package main import ( "fmt" "time" ) ...
- 2022-03-19:已知一棵二叉树上所有的值都不一样, 给定这棵二叉树的头节点head, 给定一个整型数组arr,arr里放着不同的值,每个值一定在树上 返回数组里所有值的最低公共祖先。
2022-03-19:已知一棵二叉树上所有的值都不一样, 给定这棵二叉树的头节点head, 给定一个整型数组arr,arr里放着不同的值,每个值一定在树上 返回数组里所有值的最低公共祖先. 答案202 ...