WEBSOCKET后端知识点

112 阅读2分钟

概念 a. websocket通讯的建立阶段是依赖于http协议的。最初的握手阶段是http协议,握手完成后就切换到websocket协议,并完全与http协议脱离了。 b. 建立通讯时,也是由客户端主动发起连接请求,服务端被动监听。 c. 通讯一旦建立连接后,通讯就是“全双工”模式了。也就是说服务端和客户端都能在任何时间自由得发送数据,非常适合服务端要主动推送实时数据的业务场景。 d. 交互模式不再是“请求-应答”模式,完全由开发者自行设计通讯协议。 e. 通信的数据是基于“帧(frame)”的,可以传输文本数据,也可以直接传输二进制数据,效率高。当然,开发者也就要考虑封包、拆包、编号等技术细节。

1.导入websocket的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactiId>spring-boot-starter-websocket</artifactiId> </dependency>

2.websocket

public class websocketConfig{ //注入一个ServerEndpointExporter,改bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint @Bean public ServerEndpointExporter serverEndpointExporter (){ return new ServerEndpointExporter(); } }

3.websocketServer

@ServerEndpoint("/websocket") @Component public class websocketServer{

private Session session;

//concurrent包线程安全的set,用来存放每个客户端对应的websocket对象,若要实现服务端和单一客户端之间的通信的话,可以使用map来存放,其中key可以为用户标识
private static CopyOnWriteArraySet<websocketServer> websocket = new CopyOnWriteArraySet<>();

//连接建立成功调用的方法
@OnOpen
public void onOpen(Session session){
    try{
        this.session = session;
        //此处可添加需求的逻辑
        websocket.add(this);
    }catch(IOExpection e){
        logger.error("websocket send message error");
    }
}


//连接关闭掉用的方法
@OnClose
public void onClose(Session session){
    //此处可添加需求的逻辑
    //移除websocket对象
    websocket.remove(this);
}

//收到客户端消息后调用的方法
@OnMessage
public void onMessage(String message , Session session){
      //此处可添加需求的逻辑
}

//发生错误时调用
@OnError
public void onError(Session session , Throwable error){
    //此处可添加需求的逻辑
}

//发送消息
public void sendMessage(String message){
    //此处可添加需求的逻辑
}

}