我们正在使用Spring Boot WebSocket开发一个Chat应用程序 . 用户可以登录聊天应用程序,托管在Tomcat中并向其他在线用户发送消息 . 我们无法从另一个iOS客户端连接到同一个聊天应用程序 .

以下是我们在服务器和客户端中的代码实现

///////////////////////////////////////////
// Server side implementation
///////////////////////////////////////////

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/message");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/tracking").withSockJS();
    }
}

@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfiguration implements WebSocketMessageBrokerConfigurer {

    private final Logger log = LoggerFactory
            .getLogger(WebsocketConfiguration.class);

    public static final String IP_ADDRESS = "IP_ADDRESS";

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/message");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        log.debug("registering StompEndpoints");
        registry.addEndpoint("/websocket/tracker")
                .setHandshakeHandler(new DefaultHandshakeHandler() {
                    // custom authentication 
                }).withSockJS()
                .setInterceptors(httpSessionHandshakeInterceptor());
    }

    @Bean
    public HandshakeInterceptor httpSessionHandshakeInterceptor() {
        return new HandshakeInterceptor() {

            @Override
            public boolean beforeHandshake(ServerHttpRequest request,
                    ServerHttpResponse response, WebSocketHandler wsHandler,
                    Map<String, Object> attributes) throws Exception {
                if (request instanceof ServletServerHttpRequest) {
                    ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
                    attributes.put(IP_ADDRESS,
                            servletRequest.getRemoteAddress());
                }
                return true;
            }

            @Override
            public void afterHandshake(ServerHttpRequest request,
                    ServerHttpResponse response, WebSocketHandler wsHandler,
                    Exception exception) {

            }
        };
    }
}

 
 
     ///////////////////////////////////////////
    // Web Client side socket creation code 
    ///////////////////////////////////////////

    var stompClient = null;
    function connect() {

    	if (stompClient != null) {
    		stompClient.disconnect();
    	}

    	var socket = new SockJS(contextPath + '/tracking');
    	stompClient = Stomp.over(socket);
    	stompClient.connect({}, function(frame) {
    		stompClient.subscribe('/message/send/individual/' + loginUserUk,
    				function(response) {
    					var messageBody1 = JSON.parse(response.body);
    					//process with the response

    				});
    	});
    } 
 
 



    ///////////////////////////////////////////
    // IOS Client side code 
    ///////////////////////////////////////////       
   let host = "xxx.xxx.x.xx:8080/tracking"
   let socket = WebSocket(url: URL(string: "wss://\(host)/")!, protocols:[])
        socket.delegate = self
        socket.connect()

   func websocketDidConnect(socket: WebSocketClient) {
        print("websocket is connected")
    }

    func websocketDidDisconnect(socket: WebSocketClient, error: Error?) {
        if let e = error as? WSError {
            print("websocket is disconnected: \(e.message)")
        } else if let e = error {
            print("websocket is disconnected: \(e.localizedDescription)")
        } else {
            print("websocket disconnected")
        }
    }

    func websocketDidReceiveMessage(socket: WebSocketClient, text: String) {
        print("Received text: \(text)")
    }

    func websocketDidReceiveData(socket: WebSocketClient, data: Data) {
        print("Received data: \(data.count)")
    }

当我们尝试从iOS连接时(在上面的代码片段中提供),我们收到以下错误:TCP Conn 0x109de3d50 SSLHandshake失败(-9847)websocket断开连接:操作无法完成 .

任何帮助深表感谢 . 提前致谢 .