关于 websocket 协议,使用 cdn 加速的情况有问。

2019-12-28 14:18:14 +08:00
 different

背景:使用 C++实现的消息传输的客户端、服务端软件

了解到 cloudflare 的 cdn 可以加速 websocket. [暂且不讨论有没有加不加“速”效果的问题]

我写的客户端和服务端是基于 websocket 协议的 [直接连接可用] ,如果使用 cdn 加速的话,我应该是在客户端当中把 cdn 的地址作为服务端地址吧?

大体在客户端的实现步骤应该是: 1.解析域名得到 cdn 的 ip 地址,2.再通过 socket 连接 cdn 地址吧,3.然后发送 websocket 连接协议。 [此流程是我实际实现过程,不知道是否有误]

可是在第 2 步,使用 socket 连接 cdn 地址的时候,报错: Resource temporarily unavailable

补充:当时我就比较郁闷了,毕竟客户端、服务端是我自己写的,是不是我写的并不是非标准的 websocket 协议,才没法连接上,可是我都还没发送 websocket 协议请求头,在第 2 步就报错了。

疑问:

1.通过 socket 连接 cdn 地址为何报错 [尝试 ping cdn 地址,能够正常 ping 通]

2.如果我通过 socket 连接 cdn 地址之后,之后发送的内容并不是标准,或者不遵循 websocket 协议,会被扔掉吗?

9992 次点击
所在节点    Linux
9 条回复
codehz
2019-12-28 14:55:06 +08:00
关于第一个问题,你可以试试用 curl 测试一下(别告诉我这玩意没实现 HTTP 服务器功能,直接裸 websocket
然后除此之外,连接上还得注意以下问题:在 cloudflare 后台把 websocket 功能打开( network 那个选项卡找一下
其次:发送升级请求的时候带上 Host 和 UA(或者去 cf 后台设置下防火墙等级,以及具体 UA 也可以在那里设置下白名单)
Host 的必须的,不然 CF 不知道到底是哪个用户的网站,也没法请求了(
different
2019-12-28 15:11:24 +08:00
@codehz 感谢,直接裸 websocket 的,没有实现 http 服务器,其次,我在 socket 连接阶段都还没得成功,更不同说发送 host 之后的内容了。
liuxingbaoyu
2019-12-28 16:34:25 +08:00
要看看是 connect 失败还是在 send 以后出问题了
而且也有可能是 CF 配置的有问题
different
2019-12-28 16:40:33 +08:00
@liuxingbaoyu 感谢,是 connect 失败,好像是端口只能是 80,我再仔细排查一下。
different
2019-12-28 18:10:47 +08:00
@codehz
@liuxingbaoyu
已经解决,由于自己使用的端口不是 80 导致的;
cloudflare 可以转发 websocket 协议的内容,不管是不是 websocket 协议,貌似只能使用 80 端口(不知道是否为免费版的缘故)
shansing
2019-12-28 18:15:21 +08:00
MeteorCat
2019-12-28 18:18:43 +08:00
前段时间我也这样,感谢楼主排雷
different
2019-12-28 18:19:11 +08:00
@shansing 感谢,改正一下:
Cloudflare 支持的 HTTP 端口:

80
8080
8880
2052
2082
2086
2095
Cloudflare 支持的 HTTPS 端口:

443
2053
2083
2087
2096
8443

websocket 端口自测
mytsing520
2019-12-28 19:29:05 +08:00
并非所有节点 IP 地址均开放了上述端口,自测

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

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

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

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

© 2021 V2EX