无法在服务器(SpringBoot)和 iOS 之间建立 WebSocket 连接

Posted

技术标签:

【中文标题】无法在服务器(SpringBoot)和 iOS 之间建立 WebSocket 连接【英文标题】:Cant able to make WebSocket connection between server(SpringBoot) and iOS 【发布时间】:2017-10-27 11:13:43 【问题描述】:

我正在尝试在 ios 和服务器(SpringBoot)之间建立 WebSocket 连接。在服务器端,我们正在使用这样的 WebSocket 连接。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer 

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) 
        config.enableSimpleBroker(URLMapping.WS_SEND);
        config.setApplicationDestinationPrefixes(URLMapping.WS_PREFIX);
    

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) 
        registry.addEndpoint("/api/v1/transactionSocket").setAllowedOrigins("*").withSockJS();
    

在 IOS 中,我使用 StompClient 库来建立 WebSocket 连接。

func makeConnection() 
    let client = StompClient(url: URL(string: "/api/v1/transactionSocket")!)
    client.delegate = self
    client.connect() 


func disconnectConnection() 
    client.disconnect()
    print("Disconnecting :\(client)")


func stompClientDidConnected(_ client: StompClient) 
    print("Stomp got connected: \(client) .... \(client.isConnected)")
    // client.subscribe("API")


func stompClient(_ client: StompClient, didErrorOccurred error: NSError) 
    print("Stomp Error occures \(client)   errror: \(error)")


func stompClient(_ client: StompClient, didReceivedData data: Data, fromDestination destination: String) 
    print("Cliemt: \(client)  Data: \(data) destination: \(destination)")

在运行时,既没有建立连接,也没有调用 'stompClientDidConnected' 委托方法。

我没怎么用过WebSocket。所以无法理解是什么原因。任何帮助将不胜感激。

谢谢

【问题讨论】:

您的客户端对象是 makeConnection() 中的一个局部变量。一旦该方法超出范围,客户端对象就会从内存中释放。 在顶部声明客户端对象后..我在“didErrorOccurred”委托方法中收到此错误日志“Error Domain=WebSocket Code=200 “Invalid HTTP upgrade” 【参考方案1】:

你可以使用StopmClientLib进行socket连接,也有subscribe方法。

https://github.com/wrathchaos/StompClientLib

【讨论】:

成功了……终于找到了解决办法。我使用了这个库并通过在 url 中附加“/websocket”来强制客户端和服务器之间的连接。

以上是关于无法在服务器(SpringBoot)和 iOS 之间建立 WebSocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot进阶之道-自动装配

Java之 Spring Cloud 微服务搭建 Feign组件(第二个阶段)SpringBoot项目实现商品服务器端是调用

Grafana+Prometheus系统监控之SpringBoot

计算机毕业设计之java+springboot基于vue的4S店车辆管理系统

java版Spring Cloud+SpringBoot+mybatis+uniapp b2b2c 多商家入驻商城之终端设置

Springboot之接口简单加密和验证