求大佬指教, Swift 服务端 vapor4.0 websocket client 问题

2021-02-19 15:01:56 +08:00
 shenfu1991

小弟最近在学习 swift 服务端框架 vapor4.0,想开发个简单的 app,在 websocket client 遇到了问题。话说这里的文档真是一言难尽。。

在连接到服务器时,官方给的 demo URL 能够正常连接,但是当我换成别的 URL 的时候总是报连接超时错误。

connectTimeout(NIO.TimeAmount(nanoseconds: 10000000000))

Google 搜索好几天也没解决,github 上的 issue 也没看到类似的问题。

源码:

import Vapor

// configures your application
public func configure(_ app: Application) throws {
    try webs(app)
    try routes(app)
}

private func webs(_ app: Application) throws {
    
// 相关文档   https://docs.vapor.codes/4.0/websockets/
    
//    let url = "ws://echo.websocket.org"   //此 url 正常接收
    let url = "wss://fstream.binance.com/stream?streams=btcusdt@aggTrade/btcusdt@kline_15m/btcusdt@bookTicker/" //此 URL 总是报超时
    
    WebSocket.connect(to: url, on: app.eventLoopGroup) { (ws) in
        print("CONNECTED!")
        ws.onText { _, text in
            print("Received text: \(text)")
        }

        ws.onBinary { _, bin in
            print("Received binary message: \(bin)")
        }
        ws.send("Sup!")
        ws.send([1,2,3,4,5])
  }.flatMapErrorThrowing { (error) in
       debugPrint("error=\(error)")
  }
   
}

项目源码: https://wenjian.xuanyuanhuangdi.org/websocket.zip

相关文档: https://docs.vapor.codes/4.0/websockets/

希望大佬指教!也可以红包求助,万分感激。

1927 次点击
所在节点    Apple
14 条回复
CommandZi
2021-02-19 15:22:57 +08:00
你确定你的 url 能正常连接的吗
shenfu1991
2021-02-19 16:32:45 +08:00
@CommandZi 可以的,iOS 工程下用别的第三方库正常连接的
Ariver
2021-02-19 16:34:50 +08:00
demoUrl 可以连接,你的 url 不行的话,我觉得还是考虑一下你的服务端吧。
至于你说的其他第三方库可以连接的话,他们连接的是其他 api,而不是 ws 吧?
shenfu1991
2021-02-19 16:50:37 +08:00
@Ariver 我的这个 URL 其实也是别人的,不是我们的服务端提供的,不是 api,就是 ws 。
CommandZi
2021-02-19 17:05:44 +08:00
抓包看看吧,我怀疑是 tls 的原因
DianQK
2021-02-19 18:41:25 +08:00
没能复现:
https://sm.ms/image/TdfupmWO6FiHg4a

使用的 Docker 环境吗?(那祝楼主好运
DianQK
2021-02-19 18:53:48 +08:00
啊。。。== 貌似是被墙了
!---Digital Currency Exchange(CRYPTO)---
||aex.com
||allcoin.com
||adcex.com
||bcex.ca
||bibox.com
||big.one
||binance.com 域名这呢


撸了个 B 站的 let url = "wss://ks-live-dmcmt-sh2-pm-03.chat.bilibili.com/sub"
楼主可以试试这个

== 不知道这个答复值不值 200
shenfu1991
2021-02-19 20:04:19 +08:00
@DianQK #7 😂,这域名确实被墙的,iOS 模拟器正常运行的,我之前开全局代理好像好像不行啊,我还在地铁,待我回家后确认后定会送上红包🧧,感谢兄弟。
DianQK
2021-02-19 20:44:32 +08:00
@shenfu1991 举手之劳,楼主愿送个红包奖励那真是太欣慰了

https://sm.ms/image/yFQjReEO9GCJLHS
shenfu1991
2021-02-19 22:12:11 +08:00
@DianQK 刚回到家,抱歉。大佬能否说一下你那边的环境,看你的 IDE 好像不是 XCode ?我用 XCode 和终端都报同样的错误,我公司电脑没有报错,估计是 XCode 版本有问题,我更新在试试。红包先送上,请查收。

https://wenjian.xuanyuanhuangdi.org/WX20210219-220720@2x.png
oxromantic
2021-02-19 23:12:40 +08:00
测了下,首先要翻墙,其次 dns 有讲究,譬如不能用 114.114.114.114 的,测试了 223.5.5.5 是可以解析到正确节点

[ NOTICE ] Server starting on http://127.0.0.1:8080
CONNECTED!
Received text: {"id": null, "error": {"code": 3, "msg": "Invalid json"}}
shenfu1991
2021-02-20 01:26:14 +08:00
@oxromantic 感谢热心帮助,不过红包只有一个,已经发给楼上了。
DianQK
2021-02-20 04:26:10 +08:00
@shenfu1991 收到🧧红包,感激

bilibili 的 wss 也不通吗?
我用的 VSCode (跑的时候还是直接终端执行一个 swift run Run

我的 Xcode 版本 12.3 ( Swift 5.3

(楼主不如考虑考虑来个 Surge...走个 tun 全 app 代理
DianQK
2021-02-20 04:30:23 +08:00
@shenfu1991 截图 address already in use (或许是终端你在跑一个,Xcode 再跑端口占用直接 报 crash 了 XD

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754249

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX