程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Netty-Socketio Scala 中的内存提升问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Netty-Socketio Scala 中的内存提升问题?

开发过程中遇到Netty-Socketio Scala 中的内存提升问题的问题如何解决?下面主要结合日常开发的经验,给出你关于Netty-Socketio Scala 中的内存提升问题的解决方法建议,希望对你解决Netty-Socketio Scala 中的内存提升问题有所启发或帮助;

我在我的 Scala 应用程序中使用 netty-socketio 1.7.18,但一段时间后它关闭了应用程序并出现内存不足错误。

我用 JavaScript 创建了一个简单的 socketio 客户端,我不断刷新网页以在浏览器中连接/断开连接,堆大小增长非常快(每次重新加载约 100mb)并且它从未被释放。最高可达 130GB。

我尝试过手动调用 GC,但它没有释放。从 VisualVM 看,原因似乎是 netty 缓冲区。

起初我怀疑我自己的 Scala 代码。我将 Netty-socketio 项目的 Java demo 转换为 Scala 以创建一个简单的服务器。但是我意识到当我在 Scala 中使用 netty-socketio 时会发生这个问题。其他人有这个问题吗?我正在寻找解决方案。

package com.wstest

import com.corundumstudio.socketio.{Ackrequest,Configuration,SocketIOClIEnt,SocketIOServer}
import com.corundumstudio.socketio.Listener.DataListener


object ScalaLauncher {

  @throws[InterruptedException]
  def main(args: ArraY[String]): Unit = {
    val config = new Configuration
    config.setHostname("localhost")
    config.setPort(9092)
    val server = new SocketIOServer(config)
    server.addEventListener("chatevent",classOf[String],new DataListener[String]() {
      overrIDe def onData(clIEnt: SocketIOClIEnt,data: String,ackrequest: Ackrequest): Unit = { // broadcast messages to all clIEnts
        server.getbroadcastoperations.sendEvent("chatevent",data)
      }
    })
    server.start()
}

解决方法

我用Config.setWorkerThreads(1)
解决了 每次刷新页面都会启动一个新的 nioEventLoopGroup 线程,旧的没有关闭。

大佬总结

以上是大佬教程为你收集整理的Netty-Socketio Scala 中的内存提升问题全部内容,希望文章能够帮你解决Netty-Socketio Scala 中的内存提升问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。