此处添加命名空间 server.addNamespace("test");
@Configuration
@EnableConfigurationProperties({SocketIOProperties.class})
public class SocketIOConfig {
@Autowired
private SocketIOProperties socketIOProperties;
public @Bean SocketIOServer socketIoServer() {
SocketConfig socketConfig = new SocketConfig();
socketConfig.setTcpNoDelay(true);
socketConfig.setSoLinger(0);
com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration();
config.setSocketConfig(socketConfig);
config.setHostname(socketIOProperties.getHost());
config.setPort(socketIOProperties.getPort());
config.setBossThreads(socketIOProperties.getBossCount());
config.setWorkerThreads(socketIOProperties.getWorkCount());
config.setAllowCustomRequests(socketIOProperties.isAllowCustomRequests());
config.setUpgradeTimeout(socketIOProperties.getUpgradeTimeout());
config.setPingTimeout(socketIOProperties.getPingTimeout());
config.setPingInterval(socketIOProperties.getPingInterval());
config.setMaxFramePayloadLength(socketIOProperties.getMaxFramePayloadLength());
config.setMaxHttpContentLength(socketIOProperties.getMaxHttpContentLength());
SocketIOServer server = new SocketIOServer(config);
server.addNamespace("test");
return server;
}
}
@Slf4j
@Service
@RequiredArgsConstructor
public class SocketIOServiceImpl implements SocketIOService {
private static final Map<UUID, SocketIOClient> CLIENT_MAP = new ConcurrentHashMap<>();
private final SocketIOServer socketIOServer;
@PostConstruct
public void autoStart () {
start();
}
@PreDestroy
private void onDestroy() {
if (socketIOServer != null) {
socketIOServer.stop();
}
}
@Override
public void start() {
socketIOServer.addConnectListener(client -> {
if (CLIENT_MAP.containsKey(client.getSessionId())) {
client.disconnect();
} else {
CLIENT_MAP.put(client.getSessionId(), client);
}
});
socketIOServer.addDisconnectListener(client -> {
CLIENT_MAP.remove(client.getSessionId());
client.disconnect();
log.info("移除client:{}", client.getSessionId());
});
socketIOServer.start();
log.info("start finish");
}
@Override
public void stop() {
if (socketIOServer != null) {
socketIOServer.stop();
}
}
@Override
public void pushMessage(String message) {
CLIENT_MAP.forEach((key, value) -> {
SocketIOClient client = socketIOServer.getClient(key);
client.sendEvent("TEST", message);
log.info("发送数据成功:{}", key);
});
}
}
http://127.0.0.1:8383/test 可以走到后台连接但是一直连接不上!
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>NETTY SOCKET.IO DEMO</title>
<base>
<script src="js/jquery.js"></script>
<script src="js/socket/socket.io.js"></script>
<style>
body {
padding: 20px;
}
#console {
height: 450px;
overflow: auto;
}
.username-msg {
color: orange;
}
.connect-msg {
color: green;
}
.disconnect-msg {
color: red;
}
</style>
</head>
<body>
<h1>信息:<span id="data"></span></h1>
<h1>状态:<span id="status"></span></h1>
</body>
<script type="text/javascript">
const socket = io('http://127.0.0.1:8383/test', {
transports: ['websocket']
});
socket.on('connect', () => {
$("#status").html("连接成功")
});
socket.on('TEST', data => {
console.log(data)
$("#data").html(data);
});
socket.on('disconnect', () => {
$("#status").html("已下线")
});
</script>
</html>
hostname是什么,一般是0.0.0.0或者局域网ip