`
renzhen
  • 浏览: 250919 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解决JRuby下Net::FTP传输文件慢的问题

阅读更多
   我曾经写过一个Ruby脚本,用于实时检测php代码是否修改,如果修改则马上通过FTP上传到服务器上,服务器在内网上,平时使用FileZilla上传和下载文件都很快,可是这个脚本上传一个2k的文件却要2s的时间,当时我没在意,因为比起手工上传,这个延时不算什么。
   最近我将JRuby升级到了1.5.5版本,升级过程很顺利,以前写的脚本都能正常运行,只是FTP上传文件的时间延持的更加厉害,一个2K的文件上传的速度竟然要4-5s(感觉,没有实际计时),这个让我不得不查问题所在了。
   这里怎么查问题就不细表,根据我的查找,问题出在ftp.rb下的sendport函数里。
def sendport(host, port)
      af = (@sock.peeraddr)[0]
      if af == "AF_INET"
	cmd = "PORT " + (host.split(".") + port.divmod(256)).join(",")
      elsif af == "AF_INET6"
	cmd = sprintf("EPRT |2|%s|%d|", host, port)
      else
	raise FTPProtoError, host
      end
      voidcmd(cmd)
    end

    其中af = (@sock.peeraddr)[0]耗费的时间很长,是整个过程中最耗时,文件上传速度慢的罪魁祸首,而查看JRuby源文件可知,这个总是返回AF_INET,因为Java不支持IPv6,于是解决的方法就很简单。只要把af = (@sock.peeraddr)[0]直接改成af = "AF_INET"即可。
  def sendport(host, port)
      #af = (@sock.peeraddr)[0]
      af = "AF_INET"
      if af == "AF_INET"
	cmd = "PORT " + (host.split(".") + port.divmod(256)).join(",")
      elsif af == "AF_INET6"
	cmd = sprintf("EPRT |2|%s|%d|", host, port)
      else
	raise FTPProtoError, host
      end
      voidcmd(cmd)
    end

    修改之后,FTP上传文件速度飞快,我一修改完代码,就可以直接刷新浏览器查看效果,再不需要等上一段时间上传完再刷新了,完美
分享到:
评论

相关推荐

    jruby-bin-1.3.1.zip

    JRuby是Java平台上的一个实现,它允许开发者在Java虚拟机(JVM)上运行Ruby编程语言。这个“jruby-bin-1.3.1.zip”压缩包是JRuby的一个早期版本,专为Ruby语言的研发提供必要的工具和环境。在这个版本中,重点是兼容...

    jruby-sandbox:JRuby VM沙箱

    JRuby沙箱是_why怪异的怪异沙箱在JRuby中的重新实现,并且很大程度上基于Ola Bini的 ,但已针对JRuby 1.7进行了更新。 先决条件 该gem是针对JRuby 1.7.6开发的,已知可与1.7.8一起使用,但尚未针对其他版本进行测试...

    如何安装与配置JRuby

    - **'cmd' 错误提示**: 如果在运行 JRuby 脚本时出现 `'cmd' 不是内部或外部命令,也不是可运行的程序或批处理文件` 的错误,可能是因为 JRuby 的批处理文件 `jruby.bat` 与系统之间存在冲突。一种临时解决方案是...

    asciidoctorj-jruby-test:展示JRuby 1.7和9.0.0.0之间的类加载差异

    展示JRuby 1.7和9.0.0.0之间的类加载差异 为JRuby 1.7构建: ./gradlew clean ear -PjrubyVersion=1.7.20.1 为JRuby 9.0.0.0构建: ./gradlew clean ear -PjrubyVersion=9.0.0.0.pre2 然后在TomEE plus上从...

    blog.jruby.org:这是blog.jruby.org的网站和数据。

    这是blog.jruby.org的网站和数据。 它由GitHub页面上的提供支持。 如何贡献 超级容易。 最简单的方法是在撰写帖子,然后通过通过电子邮件发送给我们。 自我领导的方法是遵循以下几个步骤: 在Github上分叉仓库 ...

    org.jruby.rar

    标题 "org.jruby.rar" 暗示我们正在讨论一个与 JRuby 相关的压缩文件,其中可能包含了 JRuby 的源代码、库文件或者其他相关资源。JRuby 是一种 Java 实现的 Ruby 解释器,它允许 Ruby 代码在 JVM(Java 虚拟机)上...

    jruby_windows_1_6_4安装文件

    4. **Rails支持**:对于Web开发,JRuby支持Ruby on Rails框架,可以在Windows环境下搭建高效稳定的Rails应用服务器。 5. **并发性**:JVM的线程模型为JRuby提供了良好的并发支持,适合处理高并发场景。 **JRuby ...

    用JRuby读取Excel文件

    标题“用JRuby读取Excel文件”涉及到的主要技术点是JRuby和处理Excel文件,这里我们将深入探讨这两个关键概念。 JRuby是Java平台上的一个Ruby实现,它允许开发者使用Ruby语言编写程序,同时利用Java的类库和运行...

    guard-jruby-minitest:在没有启动成本的情况下在 JRuby 上保护 Minitest

    守卫-jruby-minitest 在 TDD 环境中使用时,Guard 一直是一个很好的生产力助推器。 然而,JRuby 使 TDD 变得更加困难,如果不是不可能的话。 这是因为默认情况下,每个run_on_modification或run_on_change启动一个...

    jruby1.7.8版本呢

    **JRuby 1.7.8 版本详解** JRuby 是一个开源的、高性能的 Ruby 解释器,它能够将 Ruby 代码编译成 Java 字节码,从而在 Java 虚拟机(JVM)上运行。JRuby 的出现使得 Ruby 开发者能够利用 JVM 的强大功能和丰富的库...

    jruby-lab:JRuby的实验室是jruby内容的存储库。 带有示例和参考

    JRuby的主要传播网站- Wiki和文章一点JRuby历史 JRuby Wiki以及开始使用JRuby进行学习的方式 JRuby on Rails的Wiki部分 有关在JRuby中进行编程需要什么的文章 该参考资料显示了从Ruby类到Java类的转换 JSR-292和...

    jruby-pcap:一个简单的包装器,可以从 pcap 文件中读取数据,但也可以在 jruby 中捕获它

    将您的 Ruby 代码放在文件lib/jruby/pcap 。 要试验该代码,请运行bin/console以获得交互式提示。 TODO:删除这个和上面的文字,并描述你的宝石安装将此行添加到应用程序的 Gemfile 中: gem 'jruby-pcap' 然后执行...

    如何监控JRuby脚本的执行

    通过这些监控数据,开发者可以深入了解JRuby脚本的运行性能,及时发现和解决潜在的性能问题,提升应用的整体效率。记住,监控是持续优化的关键步骤,对于理解和改善代码执行效率有着至关重要的作用。

    jruby-bin-0.9.0.tar.gz

    **标题解析:**"jruby-bin-0.9.0.tar.gz" 是一个压缩文件,其中包含JRUBY的可执行二进制版本,版本号为0.9.0。JRUBY是Ruby编程语言的一个实现,它允许在Java平台上运行Ruby代码。 **描述解读:**描述中提到“Ruby...

    jruby-1.7.9.zip

    标题 "jruby-1.7.9.zip" 暗示了我们正在处理一个与 JRuby 相关的文件,JRuby 是一个流行的 Java 实现的 Ruby 语言版本。它允许开发者在 Java 平台上运行 Ruby 代码,利用 JVM (Java Virtual Machine) 的性能和生态...

    JRuby+Swing是开发人员钟情的选择

    3. **文档丰富**:JRuby 有详尽的文档,方便开发者学习和解决问题。 4. **IDE 支持**:支持多种优秀的 Java 开发环境,如 IntelliJ IDEA 或 Eclipse,提供良好的集成开发体验。 5. **免费与许可**:JRuby 本身和 ...

    jruby-dist-9.1.15.0-bin.tar.gz

    jruby-dist-9.1.15.0-bin.tar.gz JRuby是面向Ruby、基于Java虚拟机(JVM)的一种解释程序,它结合了Ruby语言的简易性和功能强大的JVM的执行机制,包括与Java库 全面集成。 截至2017.12.08最新稳定版 JRuby 官方更新...

    jruby-src-1.0

    这个压缩包“jruby-src-1.0.zip”包含了JRuby 1.0版本的所有源代码文件,对于开发者来说,这是一份宝贵的学习和定制JRuby的资源。 在了解JRuby之前,我们先来看一下Ruby语言。Ruby是由松本行弘(Yukihiro Matsumoto...

    jRuby On Rails WEB2.0

    《jRuby on Rails WEB2.0》:将Ruby on Rails融入Java平台的实践指南 《jRuby on Rails WEB2.0》是一部由Ola Bini撰写的书籍,深入探讨了如何将Ruby on Rails这一敏捷开源框架与Java平台相结合,以构建高效、灵活的...

Global site tag (gtag.js) - Google Analytics