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代理 根据官方文档配置不可行