Solon v2.7.5

Socket.D 像 Ajax 一样使用

</> markdown

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();
    }
}