建一个springboot想demo
然后是html
先看websocket配置类
WebSocketStompConfig
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
/**
*
- @ClassName: WebSocketStompConfig
- @Description: springboot websocket stomp配置
- @author cheng
- @date 2017年9月27日 下午3:45:36
*/
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketStompConfig extends AbstractWebSocketMessageBrokerConfigurer {
/**
* 注册stomp的端点
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// 允许使用socketJs方式访问,访问点为webSocketServer,允许跨域
// 在网页上我们就可以通过这个链接
// http://localhost:8080/webSocketServer
// 来和服务器的WebSocket连接
registry.addEndpoint("/webSocketServer").setAllowedOrigins("*").withSockJS();
}
/**
* 配置信息代理
*/
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
// 订阅Broker名称
registry.enableSimpleBroker("/queue", "/topic");
// 全局使用的消息前缀(客户端订阅路径上会体现出来)
registry.setApplicationDestinationPrefixes("/app");
// 点对点使用的订阅前缀(客户端订阅路径上会体现出来),不设置的话,默认也是/user/
// registry.setUserDestinationPrefix("/user/");
}
}
然后两个实体类
package com.example.demo.entity;
/**
-
@Auther: liufei
-
@Date: 2020/7/6 16:16
-
@Description:
*/
public class ClientMessage {
private String name;public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}
}
package com.example.demo.entity;
/**
-
@Auther: liufei
-
@Date: 2020/7/6 16:16
-
@Description:
*/
public class ServerMessage {
private String responseMessage;public ServerMessage(String responseMessage) {
this.responseMessage = responseMessage;
}public String getResponseMessage() {
return responseMessage;
}public void setResponseMessage(String responseMessage) {
this.responseMessage = responseMessage;
}
}
package com.example.demo.action;
/**
- @Auther: liufei
- @Date: 2020/7/6 16:14
- @Description:
*/
import com.example.demo.entity.ClientMessage;
import com.example.demo.entity.ServerMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.annotation.SubscribeMapping;
import org.springframework.stereotype.Controller;
/**
*
-
@ClassName: WebSocketAction
-
@Description: websocket控制层
-
@author cheng
-
@date 2017年9月27日 下午4:20:58
*/
@Controller
public class WebSocketAction {private Logger logger = LoggerFactory.getLogger(this.getClass());
@MessageMapping("/sendTest")
@SendTo("/topic/subscribeTest")
public ServerMessage sendDemo(ClientMessage message) {
logger.info(“接收到了信息” + message.getName());
return new ServerMessage(“你发送的消息为:” + message.getName());
}@SubscribeMapping("/subscribeTest")
public ServerMessage sub() {
logger.info(“XXX用户订阅了我。。。”);
return new ServerMessage(“感谢你订阅了我。。。”);
}
}
package com.example.demo;
import com.example.demo.action.TT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
-
@Auther: liufei
-
@Date: 2020/7/6 11:31
-
@Description:
*/
@RestController
public class TestController {@Autowired
private TT tt;@RequestMapping("/aa")
public String getTest(){return tt.getTest1();
}
}
import com.example.demo.entity.ServerMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
/**
-
@Auther: liufei
-
@Date: 2020/7/6 17:07
-
@Description:
*/
@Service
public class TT {
@Autowired
private SimpMessagingTemplate messagingTemplate;public String getTest1(){
messagingTemplate.convertAndSend("/topic/subscribeTest", new ServerMessage(“liufei”));
return “liufei”;
}//客户端只要订阅了/topic/subscribeTest主题,调用这个方法即可
public void templateTest() {
messagingTemplate.convertAndSend("/topic/subscribeTest", new ServerMessage(“服务器主动推的数据”));
}
}
最后是html
发送消息 订阅消息/topic/sendTest 订阅消息/topic/subscribeTest
关闭WebSocket连接