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/

相关推荐
人工智能训练5 小时前
OpenEnler等Linux系统中安装git工具的方法
linux·运维·服务器·git·vscode·python·ubuntu
Wang15305 小时前
jdk内存配置优化
java·计算机网络
郭涤生5 小时前
第十章_信号_《UNIX环境高级编程(第三版)》_笔记
服务器·笔记·unix
0和1的舞者5 小时前
Spring AOP详解(一)
java·开发语言·前端·spring·aop·面向切面
Wang15305 小时前
Java多线程死锁排查
java·计算机网络
web小白成长日记5 小时前
在Vue样式中使用JavaScript 变量(CSS 变量注入)
前端·javascript·css·vue.js
QT 小鲜肉6 小时前
【Linux命令大全】001.文件管理之which命令(实操篇)
linux·运维·服务器·前端·chrome·笔记
C_心欲无痕6 小时前
react - useImperativeHandle让子组件“暴露方法”给父组件调用
前端·javascript·react.js
小小星球之旅6 小时前
CompletableFuture学习
java·开发语言·学习
额呃呃6 小时前
select详细分析
服务器