netty socket 使用Namespace无法连接

此处添加命名空间 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>
阅读 2.9k
1 个回答

hostname是什么,一般是0.0.0.0或者局域网ip

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题