Socket.D 像 Ajax 一样使用
Socket.D 的 Js 开发,详见:《Socket.D - JavaScript 开发》 。使用 socket.d 开发 web 前端“接口”好处有:
- 功能上可同时替代 http 和 ws
- 为 ws 增强了交互能力和 Qos1 消息质量
- 有自动心跳与断线重连
1、客户端示例代码
使用时,可以根据自己的业务对原生接口包装,进一步简化使用。(开发时,要注意端口与服务端的对上)
<script src="/js/socket.d.js"></script>
<script>
async function demo(){
//创建单例
const clientSession = SocketD.createClient("sd:ws://127.0.0.1:8602/?u=a&p=2")
.open();
//添加用户(加个内容类型,方便与 Mvc 对接)
const entity = SocketD.newEntity("{id:1,name:'noear'}").metaPut("Content-Type","text/json"),
clientSession.sendAndRequest("/user/add", entity).thenReply(reply=>{
const rst = JSON.parse(reply.dataAsString());
if(rst.code == 200){
alert("添加成功!");
}else{
alert("添加失败");
}
})
}
demo();
</script>
2、服务端示例代码
- 使用 socket.d 接口开发
@ServerEndpoint("/")
public class SocketdEventListener extends EventListener {
public SocketdEventListener(){
doOnOpen(s->{
//鉴权
if("a".equals(s.param("u")) == false){
s.close();
}
}).doOn("/user/add", (s,m)->{
if(m.isRequest()){
s.reply(m, new StringEntity("{\"code\":200}"));
}
});
}
}
- 使有 mvc 接口开发
可以使用 socket.d 的服务(可参考 《 Sokcet.D 与 Solon 集成》),并转为 handler 接口
@ServerEndpoint("/")
public class SocketdAsMvc extends ToHandlerListener {
}
也可以使用 http-server 的 websocket 转为 socket.d 服务,再转为 hander 接口(可参考《WebSocket 协议转换为 Socket.D》)
@ServerEndpoint("/")
public class WebSocketAsMvc extends ToSocketdWebSocketListener {
public WebSocketAsMvc() {
super(new ConfigDefault(false), new ToHandlerListener());
}
}
就可以 Mvc 开发 Socket.D 的消息处理:
//控制器
@Controller
public class HelloController {
@Socket
@Mapping("/hello/add")
public Result hello(long id, String name) { //{code:200,...}
return Result.succeed();
}
}