Solon 1.2.12 发布,新的惊喜

栏目: 软件资讯 · 发布时间: 4年前

内容简介:Solon 一个类似Springboot的微型开发框架。强调:克制 + 简洁 + 开放的原则。力求:更小、更快、更自由的体验。 所谓更小: 内核0.1m,最小Web开发单位0.2m(相比Springboot项目包,小到可以乎略不计了) 所谓更快...

Solon 一个类似Springboot的微型开发框架。强调:克制 + 简洁 + 开放的原则。力求:更小、更快、更自由的体验。

所谓更小:

内核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 1.2.12 发布,新的惊喜》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

500 Lines or Less

500 Lines or Less

Amy Brown、Michael DiBernardo / 2016-6-28 / USD 35.00

This book provides you with the chance to study how 26 experienced programmers think when they are building something new. The programs you will read about in this book were all written from scratch t......一起来看看 《500 Lines or Less》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具