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

2021-08-22 08:19:23 +08:00
 rita413413
最近自己在用 goframe +adminLTE 写一个后台管理站点,所有页面都是服务端渲染。我要做一些通知要用到 websicket 。这个前端的 websocket,要怎样创建才能只需要创建一次就好了?

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

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

https://turbo.hotwired.dev
sunorg
2021-08-22 12:27:01 +08:00
套 iframe,父页面链接 ws,然后操作子页面,完美解决
joesonw
2021-08-22 12:29:41 +08:00
页面不刷新那不就是前后分离。要服务端渲染肯定每次刷新掉了,要么自己包个框架,服务器渲染的内容通过 websocket 推回去,前端接到了把容器里的内容替换掉。
crystom
2021-08-22 14:52:46 +08:00
jquery-pjax 或者 turbolinks
rita413413
2021-08-23 01:10:01 +08:00
@codehz
@kidlj
@sunorg
@joesonw
多谢大家的回答,原来 adminLTE 有 iframe 版的页面,在顶级页面里面建立连接就可以了……

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

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

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

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

© 2021 V2EX