SpringBoot中如何使用WebSocket呢?

戚薇 SpringBoot 发布时间:2023-06-22 22:27:08 阅读数:6932 1
下文笔者讲述SpringBoot中使用WebSocket的方法分享
学习完本篇之后,你将掌握WebSocket的i基本用法,如下所示

websocket简介

WebSocket是在单个TCP连接上进行全双工通信的协议
   WebSocket通信协议于2011年被IETF定为标准RFC 6455
      由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单
      允许服务端主动向客户端推送数据
      在WebSocket API中
      浏览器和服务器只需要完成一次握手
      两者之间就直接可以创建持久性的连接,并进行双向数据传输

Springboot实现websocket

springboot自带websocket
  我们只需使用几个简单的注解
      就可以实现websocket的功能
例:SpringBoot实现websocket

//定义一个websocket启动类
//通普通springboot一样
 
package testspringboot.test7websocket;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
 
@SpringBootApplication
@PropertySource(value = "test7.properties")
public class Test7Main {
 
	public static void main(String[] args) {
		SpringApplication.run(Test7Main.class, args);
	}
 
}

//编写一个websocket的配置类

package testspringboot.test7websocket;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
@Configuration
public class WebSocketConfig {
 
	@Bean
	public ServerEndpointExporter serverEndpointExporter() {
		return new ServerEndpointExporter();
	}
	
}

//配置文件中配置端口test7.properties
server.port=80

//主逻辑都放到@ServerEndpoint标签注释的类里
//此类类似controller的功能
//可以使用4种注解处理业务:

	@OnOpen:处理客户端的连接;
	@OnClose:处理客户端断开;
	@OnError:处理故障错误;
	@OnMessage:处理具体消息
   有三种消息类型
    String类型
    ByteBuffer类型
    PongMessage类型
    同一消息类型类里不能出现多次;
    另外可以通过Session对象设置属性或发送数据
     session.getUserProperties()存取属性
     session.getBasicRemote() 或 session.getAsyncRemote() 
	     可进行同步异步发送数据

处理类

package testspringboot.test7websocket;
 
import java.io.IOException;
import java.nio.ByteBuffer;
 
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.PongMessage;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
 
import org.springframework.stereotype.Component;
 
@Component
@ServerEndpoint(value = "/websockettest/{name}")
public class WebSocketHandler {
 
	@OnOpen  
    public void onOpen(@PathParam("name") String name, Session session) throws IOException {  
        System.out.println("onOpen:" + name);
        session.getUserProperties().put("name", name);
    }
	
	@OnClose  
    public void onClose(@PathParam("name") String name, Session session) throws IOException {
		System.out.println("onClose:" + name);
		System.out.println(session.getUserProperties().get("name") + "关闭了");
    }
	
	@OnError  
    public void onError(Session session, Throwable error) {
		System.out.println("onERROR");
        error.printStackTrace();  
    }
	
	@OnMessage
	public void textMessage(Session session, String msg) {
		System.out.println("收到:" + msg);
		try {
			session.getBasicRemote().sendText("hello");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@OnMessage
	public void binaryMessage(Session session, ByteBuffer msg) {
		System.out.println("Binary message: " + msg.toString());
	}
	@OnMessage
	public void pongMessage(Session session, PongMessage msg) {
		System.out.println("Pong message: " + msg.getApplicationData().toString());
	}
	
}

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202306/6864.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者