相关文章推荐
欢快的围巾  ·  Laravel Passport ...·  1 年前    · 
坏坏的西瓜  ·  海洋学院·  1 年前    · 
憨厚的乌冬面  ·  android - How to ...·  1 年前    · 
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-websocket</artifactId>
            </dependency>

然后添加 @EnableWebSocket 注解 设置socket服务注册

@Configuration @EnableWebSocket public class WebSocketHandShakeConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer { //注册通信接口 @Autowired private WebSocketController testWebSocketController; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { //注册socket地址,以及允许所有请求 以及拦截器验证权限 registry.addHandler(testWebSocketController, "/socketserver") .addInterceptors(new HandShakeInterceptor()).setAllowedOrigins("*");

实现通信接口

@RestController
public class WebSocketController extends TextWebSocketHandler {
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        log.info("WebSocket服务端连接: "+session.getAttributes().get("token")+"===>");
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        log.info("WebSocket服务端关闭: 关闭连接状态: "+status);
	  //socket关闭处理业务逻辑;
        closeSession(getToken(session));
    @Override
    public void handleMessage(WebSocketSession wsSession, WebSocketMessage<?> message) throws Exception {
        log.info("WebSocket服务端接受:接受来自客户端发送的信息: "+message.getPayload().toString());
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        log.info("WebSocket服务端异常:连接异常信息: " + exception.getMessage());
        log.info("token : "+getToken(session) + ",deviceId : "+getDeviceId(session) +" => "+ exception.getMessage());
        closeSession(getToken(session));
    private static void closeSession(String token,String deviceId, boolean isError){
        log.info("关闭通信后 处理业务");

权限验证,根据自己具业务验证权限

public class HandShakeInterceptor  extends HttpSessionHandshakeInterceptor {
    private final Logger logger = LoggerFactory.getLogger(HandShakeInterceptor.class);
     * 在WebSocket连接建立之前的操作,以鉴权为例
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
                                   WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
        ServletServerHttpRequest serverRequest = (ServletServerHttpRequest) request;
        String token = serverRequest.getServletRequest().getParameter("token");
        if (("null".equals(token) || TokenCacheUtils.validateToken(token))) {
           //此处将token传递到WebSocketController,必须写否则拿不到数据
            attributes.put("token", token);
            return super.beforeHandshake(request, response, wsHandler, attributes);
        } else {
            return false;
    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
                               WebSocketHandler wsHandler, Exception ex) {
        // 省略根据业务处理
                                    Spring Boot 是一个快速构建 Java Web 应用程序的框架,它是 Spring Framework 的一部分,可以整合各种第三方库和服务,提供了很多便捷的功能。其中,Spring Boot 版本的 WebSocket 功能是实现实时通信的常用方式之一。
WebSocket 是一种全双工通信协议,它建立在 HTTP 协议上,可以在客户端和服务器之间实现实时的数据交换。Spring BootWebSocket 模块可以通过 spring-boot-starter-websocket 来快速集成,这个 starter 包含了所有需要的依赖和自动配置,让使用者能够轻松地集成 WebSocket 功能。
在 Spring Boot 中,我们可以使用 @EnableWebSocket注解来启用 WebSocket 功能,并使用 WebSocketHandlerRegistry 注册 WebSocket 处理器,指定访问地址和允许跨域请求头。WebSocket 处理器可以继承自 TextWebSocketHandler 或 BinaryWebSocketHandler,分别处
                                    /如果spingboot配置文件中中配置了server.servlet.context-path,则格式为ws//ip接口启动的端口/server.servlet.context-path的名称/webSocketDemo。//连接到WebSocket的url地址。格式为ws//ip接口启动的端口/webSocketDemo。//连接发生错误的回调方法。//连接成功建立的回调方法。//ws连接断开的回调方法。//接收到消息的回调方法。//将消息显示在网页上。...
                                    从nginx配置看,进行了负载均衡,服务进行了集群部署,项目部署在多台机器上,如此,当一个客户端用户和一台机器建立了链接,客户端自然是不会再去和其他机器建立连接,同时一般建立连接成功时,还会断开旧的连接,这样就不能和新的机器建立连接。其中要监听listen 80端口,尤其注意的是要注意这下面2个配置必须加上,否则建立连接成功立刻就会断掉。注意,使用wss调用需要在nginx配置ssl证书,否则部署到服务器是无法建立websocket连接的。收到客户端发送到服务器发给接收者的消息时,
                                    有关@EnableWebMvc
打开@EnableWebMvc查看官方注释,:
 * Adding this annotation to an {@code @Configuration} class imports the Spring MVC
 * configuration from {@link WebMvcConfigurationSupport}, e.g.:
意思就是这个标签注释与@Configuration一起使用,注释在springMvc的配置类上以配置自己需要的springMvc配置
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-websocket</artifactId>
</dependency&gt...
                                    在上家公司做IM消息系统的时候,一直是使用 WebSocket 作为收发消息的基础组件,今天就和大家聊聊在 Java 中,使用 WebSocket 所常见的四种姿势,如果大家以后或者现在碰到有要使用 WebSoocket 的情况可以做个参考。上面的思维导图已经给大家列出了三种使用 WebSocket 的方式,下文会对它们的特点进行一一解读,不同的方式具有不同的特点,我们先按下不表。在这里,我想让大家思考一下我在思维导图中列举的第四种做 WebScoket 支持的方案可能是什么?不知道大家能不能猜对,后文将会
本文仓库地址:chat01
一、网页技术发展过程
一开始的网页是静态的html页面,不能进行交互,随后javascript出现,在一定程度上实现了页面的简单交互。不过javascript不能和服务端交互,随后ajax的出现解决了与服务端交互的问题,ajax存在的不足——所有的请求都是由客户端发起的,服务端进行响应,若服务端有最新的消息,则难以发送到客户端去,不过我们一直存在这种实时通讯的需求。
在没有We
                                    在项目中定义一个WebSocket配置类,用于配置WebSocket消息代理的相关参数。} }该配置类中使用@EnableWebSocketMessageBroker注解来启用WebSocket消息代理功能,使用configureMessageBroker方法来配置消息代理的相关参数,使用registerStompEndpoints方法来注册Stomp协议的WebSocket端点。
                                    本篇文章针对基于spring @EnableWebSocket 实现socket通信业务处理的处理
在socket通信默认情况下是线程不安全的,当多个线程访问同一个socket实体是将会发生错误,具体看源码当socket发送信息是改变自身状态,当另一个线程发送时会检查状态,当状态不为初始值是将抛出异常,
本人解决思路是将每个socket客户端的信息根据放到单独队列去处理,以实现单线程操作
                                    介绍WebSocket大家应该是再熟悉不过了,如果是单体应用确实不会有什么问题,但是当我们的项目使用微服务架构时,就可能会存在问题比如服务A有两个实例A1和A2,前端的WebSocket客户端C通过网关的负载均衡连到了A1,这个时候当A2触发消息发送的逻辑,需要将某个消息发送给所有的客户端时,C就接受不到消息这个时候我们很快就能想到一种最简单的解决方案,就是把A2的消息转发给A1,A1再把消息发送...
2、@EnableWebSocket注解
(1)注解引入一个配置类DelegatingWebSocketConfiguration.class
(2)DelegatingWebSocketConfiguration配置类会被容器自动加载,同时会注入容器中所有的WebSocketConfigurer实现到configurers中;同时registerWebSocketHandlers()方法会遍历configurers并回调所有WebSocketC
                                    问题描述:
服务集成了websocket,集成spring cloud bus后,调用/bus/refresh端点发生异常,不仅实例无法读取最新的配置信息,实例也再也无法注册到eureka
jdk:1.8
spring cloud: Daltson.RELEASE
原因分析:
通过跟踪代码发现,是因为@EnableWebSocketMessageBroker会初始化CompositeMes...