本文主要是介绍Solon 开源框架讲的“三源合一”是怎么回事?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、什么是“三源合一”?
“三源合一”,是 Solon 应用开发框架早期的一个架构想法。是指 Http、Socket、WebSocket 几个不同的通讯信号,进行统一架构处理…并且小巧。 对于 Socket 和 WebSocket,在原 消息+监听 的模式之外增加了 Mvc 模式(即 Handler + Context 接口处理)。
现在看来包括消息中间件的消息处理等等,都是可以转换成 Mvc 模式。怎么实现?这个太长了,这里只讲应用效果。
2、Http Mvc
public class DemoApp {public static void main(String[] args) {Solon.start(DemoApp.class, args);}
}@Controller
public class HelloController {@Mapping("/mvc/hello")public Result hello(long id, String name) { //{code:200,...}return Result.succeed();}
}
Http 怎么调用?就不细讲了。
3、Socket Mvc(使用 Socket.D 协议的请求答复接口)
Socket.D 通读协议,在设计之前就考虑了一个接口(sendAndRequest)用于兼容 Http 的请求模式,也称为应签模式。具体参考:《Socket.D 协议转为 Mvc 接口》
public class DemoApp {public static void main(String[] args) {Solon.start(DemoApp.class, args, app -> {app.enableSocketD(true);});}
}//ToHandlerListene 监听器,会把 Socket.D 消息包转换成 Handler + Context 接口
@ServerEndpoint("/mvc/")
public class SocketdAsMvc extends ToHandlerListener {
}@Controller
public class HelloController {@Mapping("/mvc/hello")public Result hello(long id, String name) { //{code:200,...}return Result.succeed();}
}
假如我们服务端启用的是sd:ws
协议架构,客户端要怎么调用?三种方式:
- 使用 java socket.d 原生接口调用
let clientSession = SocketD.createClient("sd:ws://localhost:28082/mvc/?u=a").open();let request = new StringEntity("{id:1,name:'noear'}").metaPut("Content-Type","text/json"),
let response = clientSession.sendAndRequest("/mvc/hello", entity).await();
- 使用 java rpc 代理模式调用
HelloService rpc = SocketdProxy.create("sd:ws://localhost:28082/mvc/?u=a", HelloService.class);System.out.println("MVC result:: " + mvc.hello("noear"));
- 使用 js socket.d.js 调用(兼容:浏览器, uniapp(h5, android, ios), weixin, node.js)
const clientSession = await SocketD.createClient("sd:ws://127.0.0.1:28082/mvc/?u=a").open();//添加用户(加个内容类型,方便与 Mvc 对接)
const entity = SocketD.newEntity("{id:1,name:'noear'}").metaPut("Content-Type","text/json"),
clientSession.sendAndRequest("/mvc/hello", entity, reply=>{alert(reply.dataAsString());
})
4、WebSocket Mvc(使用 Socket.D 的请求答复接口)
看起来是简单的,用起来还是要费点功夫的。具体参考:《WebSocket 协议转换为 Socket.D》
public class DemoApp {public static void main(String[] args) {Solon.start(DemoApp.class, args, app -> {app.enableWebSocket(true);});}
}//ToSocketdWebSocketListener 监听器,会把 WebSocket 转换成 Socket.D 协议;
//ToHandlerListene 监听器,会把 Socket.D 消息包转换成 Handler + Context 接口;(一共做了两次转换)
@ServerEndpoint("/mvc/")
public class WebSocketdAsMvc extends ToSocketdWebSocketListener {public WebSocketAsMvc() {super(new ConfigDefault(false), new ToHandlerListener());}
}@Controller
public class HelloController {@Mapping("/mvc/hello")public Result hello(long id, String name) { //{code:200,...}return Result.succeed();}
}
WebSocket 转换为 Socket.D 协议,就可以使用 Socket.D 的接口去调用了:)
这篇关于Solon 开源框架讲的“三源合一”是怎么回事?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!