Socket.D 的 Js 开发，详见：[《Socket.D - JavaScript 开发》](https://socketd.noear.org/article/694) 。使用 socket.d 开发 web 前端“接口”好处有：


* 功能上可同时替代 http 和 ws
* 为 ws 增强了交互能力和 Qos1 消息质量
* 有自动心跳与断线重连

### 1、客户端示例代码

使用时，可以根据自己的业务对原生接口包装，进一步简化使用。（<mark>开发时，要注意端口与服务端的对上</mark>）

```html
<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 接口开发

```java
@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 集成》](/article/652)），并转为 handler 接口

```java
@ServerEndpoint("/")
public class SocketdAsMvc extends ToHandlerListener {
}
```
 也可以使用 http-server 的 websocket 转为 socket.d 服务，再转为 hander 接口（可参考[《WebSocket 协议转换为 Socket.D》](/article/646)）
 
 ```java
 @ServerEndpoint("/")
public class WebSocketAsMvc extends ToSocketdWebSocketListener {
    public WebSocketAsMvc() {
        super(new ConfigDefault(false), new ToHandlerListener());
    }
}
 ```


就可以 Mvc 开发 Socket.D 的消息处理：

```java
//控制器
@Controller
public class HelloController {
    @Socket
    @Mapping("/hello/add")
    public Result hello(long id, String name) { //{code:200,...}
        return Result.succeed();
    }
}
```