文档章节

spring-websocket使用方法

wankaiming
 wankaiming
发布于 2017/04/06 16:14
字数 587
阅读 133
收藏 0

1.pom.xml加入依赖包

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-websocket</artifactId>
	<version>${spring.version}</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-messaging</artifactId>
	<version>${spring.version}</version>
</dependency>

2.配置web.xml

<servlet>
	<servlet-name>rest</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
	<async-supported>true</async-supported>  <!-- 加入这一行 -->
</servlet>
<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
	<async-supported>true</async-supported> <!-- 加入这一行 -->
</filter>

3.配置websocket

@Configuration
@EnableWebMvc
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

	@Override
	public void configureMessageBroker(MessageBrokerRegistry config) {
		//这句表示在topic和user这两个域上可以向客户端发消息
		config.enableSimpleBroker("/topic", "/user");
		//这句表示给指定用户发送(一对一)的主题前缀是“/user/”
		config.setUserDestinationPrefix("/user");
	}

	@Override
	public void registerStompEndpoints(StompEndpointRegistry registry) {
		//这个和客户端创建连接时的url有关
		registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS();
	}

}

4.建立一个消息dto

public class MessageDto implements Serializable{
	
	private static final long serialVersionUID = -4953803885944191487L;
	
	private Date time;

	private Integer code;
	
	private String msg;

	public Date getTime() {
		return time;
	}

	public void setTime(Date time) {
		this.time = time;
	}

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
}

5.测试消息发送的地址

@RestController
@RequestMapping(value = "/test")
public class TestRest {
	
    @Autowired
    private SimpMessageSendingOperations simpMessageSendingOperations;
	
	/**
	 * 测试消息发送
	 * @return
	 */
    @NotNeedOauth
    @RequestMapping(value = "/pub",method = RequestMethod.GET)
    public Object praiseBeingList(){
    	
    	MessageDto msg_1 = new MessageDto();
    	msg_1.setTime(new Date());
    	msg_1.setCode(0);
    	msg_1.setMsg("点对点");
    	simpMessageSendingOperations.convertAndSendToUser("1", "/message", msg_1); //一对一发送,发送特定的客户端  
    	
    	MessageDto msg = new MessageDto();
    	msg.setTime(new Date());
    	msg.setCode(0);
    	msg.setMsg("广播");
    	simpMessageSendingOperations.convertAndSend("/topic/broadcast",msg); //广播  
    	

        Map<String,Object>  resultMap = new HashMap<>();
        resultMap.put("code","ok");
        return resultMap;
    }

}

6.前端页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head>
    <title>Hello WebSocket</title>
    <script src="http://cdn.bootcss.com/sockjs-client/1.1.1/sockjs.min.js"></script>
    <script src="http://cdn.bootcss.com/stomp.js/2.3.3/stomp.js"></script>
    <script src="http://cdn.bootcss.com/jquery/1.8.1/jquery.min.js"></script>
    <script type="text/javascript">
        var stompClient = null;
		
        function setConnected(connected) {
        	$("#connect").attr("disabled",connected);
        	$("#disconnect").attr("disabled",!connected);
        	$("#conversationDiv").css('visibility',connected ? 'visible' : 'hidden');
            $("#response").html("");
        }

        function connect() {
            var userid = 1;
            var socket = new SockJS("http://localhost:8080/websocket");
            stompClient = Stomp.over(socket);
            stompClient.connect({}, function(frame) {
                setConnected(true);
                console.log('Connected: ' + frame);
                stompClient.subscribe('/topic/broadcast', function(data){
                    console.log(data);
                    $("#response").text(data.body);
                });
               
                stompClient.subscribe('/user/' + userid + '/message',function(data){
                	console.log(data);
                	$("#response").text(data.body);
                });
            });
        }

        function disconnect() {
            if (stompClient != null) {
                stompClient.disconnect();
            }
            setConnected(false);
            console.log("Disconnected");
        }
        
    </script>
</head>
<body>
<div>
    <div>
        <button id="connect" onclick="connect();">Connect</button>
        <button id="disconnect" disabled="disabled" onclick="disconnect();">Disconnect</button>
    </div>
    <div id="conversationDiv">
        <p id="response"></p>
    </div>
</div>
</body>
</html>

7.先点击Connect按钮,建立websocket连接,然后访问http://localhost:8080/test/pub发布消息出来,这样页面就可以收到消息了

备注:如果用nginx作为前置代理,nginx 的 location需要加入下面的配置

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

© 著作权归作者所有

共有 人打赏支持
wankaiming

wankaiming

粉丝 70
博文 226
码字总数 60574
作品 0
广州
高级程序员
spring boot整合Websocket笔记

特别说明:自学笔记 使用websocket有两种方式: 使用sockjs, 使用h5的标准。 使用Html5标准自然更方便简单,所以记录的是配合h5的使用方法。 1、pom.xml中添加如下: 核心是@ServerEndpoint...

jackcooper2015
2017/12/28
0
0
Spring消息之WebSocket

一、WebSocket简介 WebSocket 的定义?WebSocket是HTML5下一种全双工通信协议。在建立连接后,WebSocket服务器端和客户端都能主动的向对方发送和接收数据,就像Socket一样。 WebSocket 的由来...

jmcui
05/06
0
0
spring-boot框架下的websocket服务

这几天在做web端实时展示服务端日志文件新增内容的功能。要满足实时的需求,我选择的方案是在web端跟服务端建立一个websocket链接,由服务端通过tail -f 命令将文件新增内容发送给web端。 关...

lilugoodjob
07/02
0
0
日志工具 - boot-websocket-log

boot-websocket-log spring boot系统中使用websocket技术实时输出系统日志到浏览器端 本项目使用如下相关技术: 1.websocket技术:WebSocket(stopmp服务端),stomp协议,sockjs.min.js,s...

KL博客
08/24
0
0
SpringBoot-WebSocket-STMOP简介与使用

简介 WebSocket:是一种网络通信协议,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息详情 sockjs-client:js库,如果浏览器不支持 WebSocket,该库可以模拟对 WebSocke...

meijm0103
09/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里开源的 java 诊断工具—— Arthas

Arthas 是 阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 java 的问题进行诊断! 一、概述 这个工具可以协助你做下面这些事情: 这个类是从哪个 jar 包加载而来的? 为什么会报各...

xiaomin0322
5分钟前
0
0
去除shell read 读取的最后一个字符

# 读取管道数据cat | while read line; do echo $line # 此时 line包含 \n or \r\ndone# 去除 read 读取的特殊字符line=${line%?} # 去除最后一个字符...

tigerBin
6分钟前
0
0
Qt之listView设置编辑状态

QListView默认是可以编辑的,可以用setEditTrigers设置QListView的条目是否可以编辑,以及如何进入编辑状态。比如: ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAb...

OceanStar
6分钟前
0
0
Linux批量替换

sed -i "s/http://cache.co188.com///image.co188.com/g" grep http:\/\/image.co188.com -rl . *.html sed -i "s/http://cache.co188.com///cache.co188.com/g" grep http:\/\/cache.co188.......

cpaku
16分钟前
0
0
设置plsql永久注册码

填写注册码: Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number:601769 password:xs374ca...

小橙子的曼曼
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部