netty-scoket.io路径配置

1、服务端代码

java 复制代码
package com.yh.service.socket;


import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.store.RedissonStoreFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.annotation.PreDestroy;

@Component
@Order(1)
public class SocketIOStart implements CommandLineRunner {

    private Logger logger = LoggerFactory.getLogger(SocketIOStart.class);

    private SocketIOServer server;

    private RedissonStoreFactory redissonStoreFactory;


    @Autowired
    public SocketIOStart(SocketIOServer server, RedissonStoreFactory redissonStoreFactory) {
        this.server = server;
        this.redissonStoreFactory = redissonStoreFactory;
    }

    @Override
    public void run(String... strings) throws Exception {
        logger.info("SocketIO Server starting...");
        server.start();
    }

    @PreDestroy
    public void destory() {
        redissonStoreFactory.shutdown();
        server.stop();
    }

}
java 复制代码
package com.yh.service.socket;

import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.annotation.SpringAnnotationScanner;
import com.corundumstudio.socketio.listener.DefaultExceptionListener;
import com.corundumstudio.socketio.store.RedissonStoreFactory;
import com.corundumstudio.socketio.store.pubsub.PubSubStore;
import org.redisson.api.RedissonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SocketImConfig {

    private PubSubStore pubSubStore;

    private SocketIOServer server;

    private static final int imPort = 28888;


    @Bean
    public RedissonStoreFactory redissonStoreFactory(RedissonClient redissonClient) {
        return new RedissonStoreFactory(redissonClient);
    }

    @Bean
    public SocketIOServer socketIOServer(RedissonStoreFactory redissonStoreFactory) {
        com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
        config.setPort(imPort);
        config.setStoreFactory(redissonStoreFactory);
        config.setExceptionListener(new DefaultExceptionListener());
        config.getSocketConfig().setReuseAddress(true);
        config.getSocketConfig().setSoLinger(0);
        config.getSocketConfig().setTcpNoDelay(true);
        config.getSocketConfig().setTcpKeepAlive(true);
        // 设置自定义路径  默认是 socket.io
        config.setContext("/socket.io");
        //前端使用
//        io.connect(url,{ transports: ["websocket"],path:"/aaaa"});
        ////解决跨域问题
        config.setOrigin(null);
        server = new SocketIOServer(config);
        pubSubStore = server.getConfiguration().getStoreFactory().pubSubStore();
        return server;
    }

    @Bean
    public PubSubStore pubSubStore() {
        return pubSubStore;
    }

    @Bean
    public SpringAnnotationScanner springAnnotationScanner(SocketIOServer socketServer) {
        return new SpringAnnotationScanner(socketServer);
    }


}

2、没有nginx代理时客户端代码

html 复制代码
      var url = 'http://172.16.50.21:28888';
              //path:"/socket.io"  对应服务端设置的   config.setContext("/socket.io");
		var socket =  io.connect(url,{ transports: ["websocket"],path:"/socket.io"});
		//var socket =  io.connect(url,{ transports: ["websocket"]});

3、展示

4、nginx代理后,代理配置

html 复制代码
		     location ^~/socket.io/ { 
            proxy_pass http://172.16.50.21:28888;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;##此处Upgrade注意大小写
            proxy_set_header Connection "Upgrade";
            proxy_set_header Remote_addr $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 15s;
            proxy_send_timeout 3600s;
            proxy_read_timeout 3600s;

        }
        

5、代理后前端

html 复制代码
        var url = 'http://172.16.50.21';
         //path:"/socket.io"  对应服务端设置的   config.setContext("/socket.io");
		var socket =  io.connect(url,{ transports: ["websocket"],path:"/socket.io"});
		//var socket =  io.connect(url,{ transports: ["websocket"]});

6、变更路径 ,服务段代码

java 复制代码
package com.yh.service.socket;


import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.store.RedissonStoreFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.annotation.PreDestroy;

@Component
@Order(1)
public class SocketIOStart implements CommandLineRunner {

    private Logger logger = LoggerFactory.getLogger(SocketIOStart.class);

    private SocketIOServer server;

    private RedissonStoreFactory redissonStoreFactory;


    @Autowired
    public SocketIOStart(SocketIOServer server, RedissonStoreFactory redissonStoreFactory) {
        this.server = server;
        this.redissonStoreFactory = redissonStoreFactory;
    }

    @Override
    public void run(String... strings) throws Exception {
        logger.info("SocketIO Server starting...");
        server.start();
    }

    @PreDestroy
    public void destory() {
        redissonStoreFactory.shutdown();
        server.stop();
    }

}
java 复制代码
package com.yh.service.socket;

import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.annotation.SpringAnnotationScanner;
import com.corundumstudio.socketio.listener.DefaultExceptionListener;
import com.corundumstudio.socketio.store.RedissonStoreFactory;
import com.corundumstudio.socketio.store.pubsub.PubSubStore;
import org.redisson.api.RedissonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SocketImConfig {

    private PubSubStore pubSubStore;

    private SocketIOServer server;

    private static final int imPort = 28888;


    @Bean
    public RedissonStoreFactory redissonStoreFactory(RedissonClient redissonClient) {
        return new RedissonStoreFactory(redissonClient);
    }

    @Bean
    public SocketIOServer socketIOServer(RedissonStoreFactory redissonStoreFactory) {
        com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
        config.setPort(imPort);
        config.setStoreFactory(redissonStoreFactory);
        config.setExceptionListener(new DefaultExceptionListener());
        config.getSocketConfig().setReuseAddress(true);
        config.getSocketConfig().setSoLinger(0);
        config.getSocketConfig().setTcpNoDelay(true);
        config.getSocketConfig().setTcpKeepAlive(true);
        // 设置自定义路径  默认是 socket.io
        config.setContext("/aaaa");
        //前端使用
//        io.connect(url,{ transports: ["websocket"],path:"/aaaa"});
        ////解决跨域问题
        config.setOrigin(null);
        server = new SocketIOServer(config);
        pubSubStore = server.getConfiguration().getStoreFactory().pubSubStore();
        return server;
    }

    @Bean
    public PubSubStore pubSubStore() {
        return pubSubStore;
    }

    @Bean
    public SpringAnnotationScanner springAnnotationScanner(SocketIOServer socketServer) {
        return new SpringAnnotationScanner(socketServer);
    }


}

7、没有nginx 代理,前端代码

html 复制代码
                var url = 'http://172.16.50.21:28888';
              
		var socket =  io.connect(url,{ transports: ["websocket"],path:"/aaaa"});
	

8、前端展示

9、设置路径 nginx代理 根据官方文档配置不可行

文档 https://socket.io/zh-CN/docs/v4/reverse-proxy/

相关推荐
fasewer3 小时前
玄机--windows日志分析
运维·服务器·windows·网络安全
会开花的二叉树3 小时前
彻底搞懂 Linux 基础 IO:从文件操作到缓冲区,打通底层逻辑
linux·服务器·c++·后端
じòぴé南冸じょうげん3 小时前
小程序的project.private.config.json是无依赖文件,那可以删除吗?
前端·小程序·json
渣哥3 小时前
我和Java 8 Stream相爱相杀的那些年
java
爱吃烤鸡翅的酸菜鱼3 小时前
【Spring】原理解析:Spring Boot 自动配置
java·spring boot
小白兔3533 小时前
一文讲通Unicode规范、UTF-8与UTF-16编码及在Java中的验证
java
会豪3 小时前
Electron主进程渲染进程如何优雅的进行通信
前端
jianghaha20113 小时前
前端 Word 模板参入特定数据 并且下载
前端·word
跟橙姐学代码3 小时前
轻松搞定 Python 模块与包导入:新手也能秒懂的入门指南
前端·python·ipython