Electron App中的Websocket客户端延迟接收

时间:2018-09-15 14:07:26

标签: vue.js websocket electron

我正在使用websocket将来自进程(在后台运行)的数据推送到我的电子应用程序(渲染器,这是一个电子对战应用程序)。通常情况下,这种方法效果很好,可以立即接收并显示数据。

但是,在某些情况下,我注意到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:仅显示一段时间。是否有任何配置选项,例如在客户端进行缓冲,还是必须更频繁地调用渲染过程??

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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