V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
different
V2EX  ›  Linux

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

  •  
  •   different · 2019-12-28 14:18:14 +08:00 · 9589 次点击
    这是一个创建于 1552 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:使用 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 条附言  ·  2019-12-28 18:11:15 +08:00
    已经解决,由于自己使用的端口不是 80 导致的;

    cloudflare 可以转发 websocket 协议的内容,不管是不是 websocket 协议,貌似只能使用 80 端口(不知道是否为免费版的缘故)

    感谢各位!
    第 2 条附言  ·  2019-12-28 18:19:51 +08:00
    Cloudflare 支持的 HTTP 端口:

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

    443
    2053
    2083
    2087
    2096
    8443

    websocket 端口自测(目前已知 80 端口可用)
    9 条回复    2019-12-28 19:29:05 +08:00
    codehz
        1
    codehz  
       2019-12-28 14:55:06 +08:00
    关于第一个问题,你可以试试用 curl 测试一下(别告诉我这玩意没实现 HTTP 服务器功能,直接裸 websocket
    然后除此之外,连接上还得注意以下问题:在 cloudflare 后台把 websocket 功能打开( network 那个选项卡找一下
    其次:发送升级请求的时候带上 Host 和 UA(或者去 cf 后台设置下防火墙等级,以及具体 UA 也可以在那里设置下白名单)
    Host 的必须的,不然 CF 不知道到底是哪个用户的网站,也没法请求了(
    different
        2
    different  
    OP
       2019-12-28 15:11:24 +08:00
    @codehz 感谢,直接裸 websocket 的,没有实现 http 服务器,其次,我在 socket 连接阶段都还没得成功,更不同说发送 host 之后的内容了。
    liuxingbaoyu
        3
    liuxingbaoyu  
       2019-12-28 16:34:25 +08:00
    要看看是 connect 失败还是在 send 以后出问题了
    而且也有可能是 CF 配置的有问题
    different
        4
    different  
    OP
       2019-12-28 16:40:33 +08:00
    @liuxingbaoyu 感谢,是 connect 失败,好像是端口只能是 80,我再仔细排查一下。
    different
        5
    different  
    OP
       2019-12-28 18:10:47 +08:00
    @codehz
    @liuxingbaoyu
    已经解决,由于自己使用的端口不是 80 导致的;
    cloudflare 可以转发 websocket 协议的内容,不管是不是 websocket 协议,貌似只能使用 80 端口(不知道是否为免费版的缘故)
    MeteorCat
        7
    MeteorCat  
       2019-12-28 18:18:43 +08:00 via Android
    前段时间我也这样,感谢楼主排雷
    different
        8
    different  
    OP
       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
        9
    mytsing520  
       2019-12-28 19:29:05 +08:00
    并非所有节点 IP 地址均开放了上述端口,自测
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5181 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:41 · PVG 17:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.