java ios websocket_如何从IOS客户端连接到Spring WebSocket服务器?

我们正在使用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 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断开连接:操作无法完成 .

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值