Swift Lightstreamer SDK在macOS项目中持续处于CONNECTING状态
macOS Swift集成Lightstreamer SDK连接一直处于CONNECTING状态的解决办法
核心问题:LightstreamerClient实例生命周期过短
你代码里的LightstreamerClient是在init方法内创建的局部变量,方法执行完毕后这个实例会被ARC自动回收,导致连接流程无法正常完成,自然一直停留在CONNECTING状态。哪怕填错服务器地址,因为实例已经被销毁,连错误回调都触发不了。
修复代码:将client改为类属性
修改TestSDK类,把LightstreamerClient定义为类的成员变量,保持强引用:
class TestSDK{ let delegateTest = SubscriptionDelegateImpl() let loggerProvider = ConsoleLoggerProvider(level: .debug) var client: LightstreamerClient! // 改为类属性,维持实例生命周期 init(){ LightstreamerClient.setLoggerProvider(loggerProvider) client = LightstreamerClient(serverAddress: "https://push.lightstreamer.com/", adapterSet: "DEMO") client.connect() let items = [ "item1", "item2", "item3" ] let fields = [ "stock_name", "last_price" ] let sub = Subscription(subscriptionMode: .MERGE, items: items, fields: fields) sub.dataAdapter = "QUOTE_ADAPTER" sub.requestedSnapshot = .yes sub.addDelegate(delegateTest) client.subscribe(sub) } }
额外排查步骤
- 添加连接状态监听
实现LightstreamerClientDelegate来捕获连接错误和状态变化,便于定位问题:
class ClientDelegateImpl: NSObject, LightstreamerClientDelegate { func clientDidChangeStatus(_ client: LightstreamerClient, newStatus: LightstreamerClient.Status) { print("当前连接状态: \(newStatus.rawValue)") } func client(_ client: LightstreamerClient, didReceiveServerError errorCode: Int, errorMessage: String?) { print("服务器错误: 代码\(errorCode), 消息: \(errorMessage ?? "无")") } func client(_ client: LightstreamerClient, didReceiveConnectionError error: Error?) { print("连接错误: \(error?.localizedDescription ?? "无详细信息")") } }
在TestSDK的init中添加代理:
let clientDelegate = ClientDelegateImpl() client.addDelegate(clientDelegate)
检查macOS网络权限
确保项目Info.plist中配置了正确的网络权限,对于HTTPS连接,默认是允许的,但如果涉及特殊服务器(比如自签名证书),需要添加NSAppTransportSecurity相关配置,禁用ATS或者指定允许的域名。验证代理设置
如果你的macOS系统使用了代理,确认Lightstreamer SDK是否能自动适配,或者手动在client的连接选项中配置代理信息。
内容的提问来源于stack exchange,提问作者user24063726
相关产品推荐
相关产品推荐

