背景:使用 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 协议,会被扔掉吗?
1
codehz 2019-12-28 14:55:06 +08:00
关于第一个问题,你可以试试用 curl 测试一下(别告诉我这玩意没实现 HTTP 服务器功能,直接裸 websocket
然后除此之外,连接上还得注意以下问题:在 cloudflare 后台把 websocket 功能打开( network 那个选项卡找一下 其次:发送升级请求的时候带上 Host 和 UA(或者去 cf 后台设置下防火墙等级,以及具体 UA 也可以在那里设置下白名单) Host 的必须的,不然 CF 不知道到底是哪个用户的网站,也没法请求了( |
2
different OP @codehz 感谢,直接裸 websocket 的,没有实现 http 服务器,其次,我在 socket 连接阶段都还没得成功,更不同说发送 host 之后的内容了。
|
3
liuxingbaoyu 2019-12-28 16:34:25 +08:00
要看看是 connect 失败还是在 send 以后出问题了
而且也有可能是 CF 配置的有问题 |
4
different OP @liuxingbaoyu 感谢,是 connect 失败,好像是端口只能是 80,我再仔细排查一下。
|
5
different OP @codehz
@liuxingbaoyu 已经解决,由于自己使用的端口不是 80 导致的; cloudflare 可以转发 websocket 协议的内容,不管是不是 websocket 协议,貌似只能使用 80 端口(不知道是否为免费版的缘故) |
6
shansing 2019-12-28 18:15:21 +08:00
|
7
MeteorCat 2019-12-28 18:18:43 +08:00 via Android
前段时间我也这样,感谢楼主排雷
|
8
different OP @shansing 感谢,改正一下:
Cloudflare 支持的 HTTP 端口: 80 8080 8880 2052 2082 2086 2095 Cloudflare 支持的 HTTPS 端口: 443 2053 2083 2087 2096 8443 websocket 端口自测 |
9
mytsing520 2019-12-28 19:29:05 +08:00
并非所有节点 IP 地址均开放了上述端口,自测
|