V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rita413413
V2EX  ›  程序员

请问 服务端渲染的站点如何使用 websocket?

  •  
  •   rita413413 · 2021-08-22 08:19:23 +08:00 via iPhone · 2610 次点击
    这是一个创建于 1171 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近自己在用 goframe +adminLTE 写一个后台管理站点,所有页面都是服务端渲染。我要做一些通知要用到 websicket 。这个前端的 websocket,要怎样创建才能只需要创建一次就好了?

    现在的情况是,前端每点击一个菜单或者页面,都会全部重新渲染。(当然页面的部分数据请求使用的是 Ajax)

    如果直接每点击一个页面就建立一次,断开一次,这样肯定不合理…… 请问有什么好的方法吗?
    7 条回复    2021-08-23 01:10:01 +08:00
    codehz
        1
    codehz  
       2021-08-22 08:39:33 +08:00 via Android
    目前没有办法跨页面保持连接,SharedWorker 也要求有多个页面才可共享
    建议套一个 iframe,然后保持顶层的不刷新,用 History API 更新 url,用 iframe 的 postMessage 做推送(或者直接在顶层渲染通知)
    建议直接快进到 WebPush,这样页面没打开也能接通知
    yin1999
        2
    yin1999  
       2021-08-22 09:01:58 +08:00 via Android
    @codehz 国内的网络环境,WebPush 很难搞啊
    kidlj
        3
    kidlj  
       2021-08-22 10:31:29 +08:00   ❤️ 1
    全部服务端渲染( template 模版这种)的话,可以考虑一下 Rails 社区的 Hotwire Turbo 方案。Turbo stream 就用来干这个的。

    https://turbo.hotwired.dev
    sunorg
        4
    sunorg  
       2021-08-22 12:27:01 +08:00 via Android
    套 iframe,父页面链接 ws,然后操作子页面,完美解决
    joesonw
        5
    joesonw  
       2021-08-22 12:29:41 +08:00 via iPhone
    页面不刷新那不就是前后分离。要服务端渲染肯定每次刷新掉了,要么自己包个框架,服务器渲染的内容通过 websocket 推回去,前端接到了把容器里的内容替换掉。
    crystom
        6
    crystom  
       2021-08-22 14:52:46 +08:00   ❤️ 1
    jquery-pjax 或者 turbolinks
    rita413413
        7
    rita413413  
    OP
       2021-08-23 01:10:01 +08:00 via iPhone
    @codehz
    @kidlj
    @sunorg
    @joesonw
    多谢大家的回答,原来 adminLTE 有 iframe 版的页面,在顶级页面里面建立连接就可以了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   976 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.