erlang 套接字一次又一次地重新连接,这会导致Live View自身定期发出事件,当与Alpine js一起使用时

of1yzvn4  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(142)

**问题:**套接字一次又一次地重新连接,导致Live View自身定期发出事件。
**场景:**我有一个包含phx-change事件的索引页面。当我让页面闲置一段时间后,事件开始周期性地自动触发。它不限于单个页面,而是发生在每个实时查看页面上,我在谷歌上搜索了这个问题,但没有找到任何解决方案。

  • 1原因我注意到,有时心跳停止超过1分钟(超时限制为1分钟),在这种情况下套接字重新加入。
  • 我增加了客户端和服务器端的超时,以检查这是否是唯一的问题,但它不工作,套接字表现相同。
  • 以前是否有人遇到过同样的问题,可能的原因是什么,如何避免这个问题,有什么建议吗?

堆叠:PETAL
仙丹:1.11二郎神:23.0Phoenix:1.5.3Phoenix_直播_查看:0.15.7 alpinejs“^2.8.2”浏览器: chrome 合金,狩猎
我认为问题是与阿尔卑斯山的J,但不能想出任何解决办法。
下面是我的app.js代码

let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content");
let liveSocket = new LiveSocket("/live", Socket, {
    uploaders: Uploaders,
    hooks: Hooks,
    params: { _csrf_token: csrfToken },
    timeout: 60000,
    dom: {
        onBeforeElUpdated(from, to) {
            if (from.__x) {
                Alpine.clone(from.__x, to);
            }
            flatpickr(".date-picker", {
                wrap: true,
                disableMobile: true,
                dateFormat: "Ymd H:i:S.ssss"
            });
            flatpickr(".datetime-picker", {
                enableTime: true,
                wrap: true,
                disableMobile: true,
                "plugins": [new confirmDatePlugin({ confirmIcon: "", confirmText: "Confirm" })],
                time_24hr: true,
                dateFormat: "Ymd H:i:S.ssss"
            });
        }
    }, 
    heartbeatIntervalMs: 10000
});

端点配置:

socket "/socket", PrintSimpleWeb.UserSocket,
  websocket: [
    timeout: :infinity,
  ],
    longpoll: false

  socket "/live", Phoenix.LiveView.Socket, websocket: [connect_info: [session: @session_options]]
yx2lnoni

yx2lnoni1#

通过简单的更新Elixir依赖项和npm包就修复了这个问题。下面是我遵循的步骤:

> remove _build, node_modules, deps folder
RUN: 
> mix deps.get 
> mix compile
> npm install (inside /assets)
> iex -S mix phx.server

相关问题