V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
firhome
V2EX  ›  程序员

请教后端大佬,订阅第三方的 webscoket,如何返回给客户端?

  •  
  •   firhome · 16 天前 · 1126 次点击
    我是前端,会点 node 。

    现在有个需求场景:根据用户订阅条件,调用第三方的 webscoket 链接,需要把第三方的 webscoket 链接返回的数据整理一下然后再返回给客户端界面。

    我想的实现方式 A:

    1.创建个 post 请求,来接收用户的订阅参数,然后服务端去订阅,服务端处理好数据后存到数据库。
    2.创建个 get 请求,用户刷页面后来获取数据库中的数据展示在页面上。

    实现方式 B:
    1. 同 A1.
    2. 服务端也创建个 ws ,客户端直接通过 ws 连接。当有数据处理的时候就推送给客户端


    A 方式不够即时(也可以通过定时请求)
    B 方式的话,我担心服务端开销很大, 毕竟又要连第三方的 ws ,又要提供 ws 服务给客户端


    请问大家,该怎么实现比较好呢?
    9 条回复    2024-12-05 20:35:06 +08:00
    LeegoYih
        1
    LeegoYih  
       16 天前
    性能瓶颈在数据库,ws 开销不大,普通配置服务器建立几万个连接没什么问题。
    ljtfdt
        2
    ljtfdt  
       16 天前
    B 方式,第三方的 ws 应该共用一个链接就可以了,所以只用关心客户端的连接数,客户端不多的话,性能应该不是问题
    lisxour
        3
    lisxour  
       16 天前
    那必须是 b 啊
    tubinorg
        4
    tubinorg  
       16 天前
    你可以认为 ws 就是 http 的 tcp 没有断开( http 升级),一直保持连接,所以基本一样
    可以在逻辑处理上断开,比如心跳,无请求数据,主动断开这个 tcp
    iOCZS
        5
    iOCZS  
       16 天前
    不需要双工的话,还可以 sse
    gongquanlin
        6
    gongquanlin  
       16 天前
    B ,A2 的轮询速度快反而压力更大;
    之前用 php 实现的某接口,2 秒轮训一次,上线之后服务器 cpu 马上被打崩;后来换成 go 的 ws ,维持在 3%左右的 cpu 占用
    guanzhangzhang
        7
    guanzhangzhang  
       16 天前
    server 一个 ws client ,订阅后把信息存库或者广播给所有前端 ws client 即可。
    我最近就有个类似的,是前端 websocket client 连 ws server ,ws server 是我 go 写的,它包含是一个 tcp client 获取数据,前端页面可以控制和接收信息,最终由 tcp client 发出去。
    skallz
        8
    skallz  
       16 天前
    看数据即时性要求了,如果要求不高,就轮询完事,要求高的话,用 sse 喽
    skallz
        9
    skallz  
       16 天前
    @gongquanlin 一般都是要求五秒及以上才会考虑轮询,哈哈,不过这个时间间隔也足够满足绝大部分场景了,除非数据实时性要求非常高
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:38 · PVG 22:38 · LAX 06:38 · JFK 09:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.