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/

相关推荐
NiceCloud喜云几秒前
Claude Code 应用内浏览器任务怎么写验收清单
服务器·人工智能·ai
人道领域4 分钟前
【0-1的agent进阶篇】Prompt 与上下文工程
java·开发语言·prompt·mcp
浮江雾14 分钟前
Flutter第四节------核心概念学习笔记:从基础语法到异步编程
linux·服务器·开发语言·笔记·flutter·入门·基础
FoldWinCard15 分钟前
D4 Linux 进程 内存 等命令
linux·运维·服务器
在线OJ的阿川24 分钟前
仿muduo库实现高并发服务器
linux·服务器·c++
KINGSEA_16826 分钟前
AgentScope Java 2.0 架构解析
java
Tyler_127 分钟前
iOS PlayWright mcp server
前端·ios·ai编程
嘟嘟071734 分钟前
从零理解 MCP:手写一个本地 MCP Server 并接入 LangChain Agent
前端·后端
cocoafei36 分钟前
GPT-5.6 后,别再混淆 ChatGPT 和 Codex 额度了
前端·人工智能·chatgpt
你怎么知道我是队长38 分钟前
JavaScript的函数介绍
开发语言·前端·javascript