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/

相关推荐
拳打南山敬老院36 分钟前
Context 不是压缩出来的,而是设计出来的
前端·后端·aigc
用户30767528112740 分钟前
💡 从"傻等"到"流淌":我在AI项目中实现流式输出的血泪史(附真实代码+深度解析)
前端
bluceli41 分钟前
前端性能优化实战指南:让你的网页飞起来
前端·性能优化
SuperEugene43 分钟前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试
没想好d44 分钟前
通用管理后台组件库-9-高级表格组件
前端
阿虎儿1 小时前
React Hook 入门指南
前端·react.js
华仔啊1 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang1 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
核以解忧1 小时前
借助VTable Skill实现10W+数据渲染
前端
WangHappy1 小时前
不写 Canvas 也能搞定!小程序图片导出的 WebView 通信方案
前端·微信小程序