【问题标题】:Websocket Client in Electron App delaying receptionElectron App中的Websocket客户端延迟接收
【发布时间】:2018-09-28 17:12:26
【问题描述】:

我正在使用 websocket 将数据从进程(在后台运行)推送到我的电子应用程序(渲染器,它是一个电子 vue 应用程序)。大多数情况下,这很有效,数据会立即接收和显示。

然而,在某些情况下,我注意到 websocket 客户端似乎缓冲了传入的消息,并且仅在延迟后才触发接收事件,从而导致消息作为批处理接收。

为了验证服务器没有缓冲任何内容,我运行了第二个连接并简单地记录了数据(chrome-addon),当我的电子应用程序延迟消息时,所有数据都被立即接收和处理。

我正在使用ReconnectingWebsocket,但也尝试了一个普通的 websocket 应用程序:

let webSocket = new WebSocket('ws://0.0.0.0:7700')
webSocket.onopen = function(openEvent) {
  console.log('WebSocket OPEN: ' + JSON.stringify(openEvent, null, 4))
}
webSocket.onclose = function(closeEvent) {
  console.log('WebSocket CLOSE: ' + JSON.stringify(closeEvent, null, 4))
}
webSocket.onerror = function(errorEvent) {
  console.log('WebSocket ERROR: ' + JSON.stringify(errorEvent, null, 4))
}
webSocket.onmessage = function(messageEvent) {
  var wsMsg = messageEvent.data
  console.log('WebSocket MESSAGE: ' + wsMsg)
}

WebSocket MESSAGE: 仅显示有一些延迟。是否有任何配置选项,例如在客户端缓冲或必须更频繁地调用渲染进程..?

【问题讨论】:

    标签: vue.js websocket electron


    【解决方案1】:

    不确定解决方案,但我们在https://github.com/firesharkstudios/butterfly-server-dotnet/tree/master/Butterfly.Example.Todo 有一个使用 Vue + Electron 的演示应用程序,它也使用 WebSockets。我从未见过像您看到的那样延迟或缓冲。也许您可以比较实现以找到原因。

    【讨论】:

    • 感谢参考!我更进一步 - 似乎它与滚动有关:当我滚动时,渲染甚至 ws-client 似乎都被阻止了 - 直到滚动条再次消失,然后所有消息批量到达并更新视图.到目前为止我找不到任何选项,而且我在纯 Vue.js webapp 中没有遇到这些问题,所以我猜它与电子有关。有什么想法吗?
    • @martin 您可能在主进程中做了很多事情。有人在演讲中说,在主进程中做很多事情是一个常见的错误,因为它会阻塞所有内容。
    • @TheFool 我试图在渲染器中使用 websocket 客户端。具体来说:我正在使用 VueJS,并且有 websocket 插件。这不会很好地工作,因为电子会在滚动时阻塞渲染器,因此滚动时消息不会到达。我从渲染器中删除了 websocket,现在将所有内容都输入 vuex。
    【解决方案2】:

    事实证明,这不是 websocket 实现,而是电子在滚动时完全阻塞了渲染器进程,因此延迟了接收。我不得不将 websocket 连接移出渲染器并使用 IPC 系统传输所有消息。

    【讨论】:

    • 你是如何为 websocket 创建一个单独的进程的?它是一个隐藏的渲染器吗?
    • 我没有创建单独的进程,我只是将websocket处理移到主进程中。
    猜你喜欢
    • 2021-06-07
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2020-10-19
    • 2020-10-09
    • 2018-03-17
    相关资源
    最近更新 更多