zoukankan      html  css  js  c++  java
  • Solon 1.2.12 发布,新的惊喜

    Solon 一个类似Springboot的微型开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的Web跑分,良好的使用体验。

    Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。

    所谓更小:

    内核0.1m,最小Web开发单位0.2m(相比Springboot项目包,小到可以乎略不计了)

    所谓更快:

    本机helloworld测试,Qps可达12万之多。可参考:《helloworld_wrk_test

    所谓更自由:

    • 代码操控自由:
    // 除了注入模式之外,还可以按需手动
    //
    //手动获取配置
    Map<String,String> db = Solon.cfg().getMap("db");
    //手动获取容器里的Bean
    UserService userService = Aop.get(UserService.class);
    //手动监听http post请求
    Solon.global().post("/user/update", x-> userService.updateById(x.paramMap()));
    
    • 框架选择自由:

    可以用solon-web这样的快速开发集成包。也可以按项目需要选择不同的插件组装,比如:为非Solon项目添加solon.boot.jlhttp,0.1m即可让项目实现http+mvc支持;还可以用MVC开发Socket应用。

    也可以用快餐方案:solon-web 这个组合包。

    本次版本重大变更:

    1、增加代码亲和度,降低学习成本;去掉各种类的X前缀

    • 新的Helloworld效果
    @Controller
    public class App{
        public static void main(String[] args){
            Solon.start(App.class, args);
        }
      
        @Mapping("/")
        public Object home(Context c){
            return "Hello world!";  
        }
    }
    

    2、增加 BeanWrap 语义特性支持

    • 通过语义特性,为Bean增加元信息描述
    //
    // 这是一个数据主从库的示例
    //
    @Configuration
    public class Config {
        //申明 db2 是 db1 为的从库
        @Bean(value = "db1", attrs = { "slaves=db2" })
        public DataSource db1(@Inject("${test.db1}") HikariDataSource dataSource) {
            return dataSource;
        }
    
        @Bean("db2")
        public DataSource db2(@Inject("${test.db2}") HikariDataSource dataSource) {
            return dataSource;
        }
    }
    

    3、发布新组件:SockeD,为服务开发而生的Socket框架。

    • 支持MVC+RPC开发模式
    //[服务端]
    @Mapping(value = "/demoe/rpc", method = MethodType.SOCKET)
    @Component(remoting = true)
    public class HelloRpcServiceImpl implements HelloRpcService {
        public String hello(String name) {
            return "name=" + name;
        }
    }
    
    //[客户端] 
    var rpc = SocketD.create("tcp://localhost:28080", HelloRpcService.class);
    System.out.println("RPC result: " + rpc.hello("noear"));
    
    • 支持单链接双向RPC开发模式(基于上例扩展)
    //[服务端]
    @Mapping(value = "/demoe/rpc", method = MethodType.SOCKET)
    @Component(remoting = true)
    public class HelloRpcServiceImpl implements HelloRpcService {
        public String hello(String name) {
            //
            //[服务端] 调用 [客户端] 的 rpc,从而形成单链接双向RPC
            //
            NameRpcService rpc = SocketD.create(Context.current(), NameRpcService.class);
            name = rpc.name(name);
            
            
            return "name=" + name;
        }
    }
    
    • 支持消息发送+监听开发模式
    //[服务端]
    @ServerEndpoint
    public class ServerListener implements Listener {
        @Override
        public void onMessage(Session session, Message message) {
            if(message.flag() == MessageFlag.heartbeat){
                System.out.println("服务端:我收到心跳");
            }else {
                System.out.println("服务端:我收到:" + message);
                //session.send(Message.wrapResponse(message, "我收到了"));
            }
        }
    }
    
    //[客户端]
    var session = SocketD.createSession("tcp://localhost:28080");
    session.send("noear");
    //session.sendAndCallback("noear", (rst)->{});   //发送并异常回调
    //var rst = session.sendAndResponse("noear");   //发送并等待响应
    
    System.out.println(rst);
    
    • 支持消息订阅开发模式
    //[客户端]
    @ClientEndpoint(uri = "tcp://localhost:28080")
    public class ClientListener implements Listener {
        @Override
        public void onMessage(Session session, Message message) {
            //之后,就等着收消息
            System.out.println("客户端2:我收到了:" + message);
        }
    }
    

    附:Solon项目地址

  • 相关阅读:
    xml
    企业级应用和互联网应用的区别
    javaee学习目标
    数据库基本原理
    数据库学习感想
    数据库设计
    团队项目自我评价
    团队项目-软件度量
    团队项目-初级版本
    团队项目—详细设计
  • 原文地址:https://www.cnblogs.com/noear/p/14188779.html
Copyright © 2011-2022 走看看