`
renzhen
  • 浏览: 247808 次
  • 性别: 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-sandbox:JRuby VM沙箱

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

    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上分叉仓库 ...

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

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

    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-complet-1.7.zip

    找不到或无法加载主类org.jruby.Main。 原因是/usr/local/hbase/lib 目录下没有jruby-complete-1.7.19.jar文件.,下载本文件,解压缩后将jar文件直接添加到/usr/local/hbase/lib 目录下。

    jruby-rack:用于JRuby和Java应用服务器的机架

    JRuby机架JRuby-Rack是Java Servlet环境的轻量级适配器,它允许任何(基于Ruby)Rack的应用程序在Java Servlet容器中未经修改地运行。 JRuby-Rack支持Rails以及任何与Rack兼容的Ruby Web框架。 有关Rack的更多信息,...

    joni-2.1.2-API文档-中文版.zip

    赠送Maven依赖信息文件:joni-2.1.2.pom; 包含翻译后的API文档:joni-2.1.2-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.jruby.joni:joni:2.1.2; 标签:joni、jruby、jar包、java、API文档、中文版; 使用...

    jruby-standford:用于自然语言处理的微服务

    JRuby-Lint3工具可以检测应用程序中的大多数JRuby不兼容性。 它遍历代码库并查找常见的陷阱 jrlint 上服务器 jruby -S rackup -s Trinidad jruby -J-Xmx2048m -J-Xms1024m -J-Xmn512m -J-XX:MaxPermSize=512m -S ...

    hibernate_jruby_example:jruby 中的 Hibernate 使用示例

    jruby Hibernate使用示例。 此示例使用Hibernate和MySQL后端作为 DOA 来保存基于Virtus模型的示例域聚合。要求jruby-1.7 mysql 5.x设置和运行如果需要,编辑hibernate.cfg.xml以自定义数据库设置。 执行以下操作: #...

    jruby-dist-9.1.15.0-bin.zip

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

    jruby_mahout:JRuby Mahout是一颗宝石,它在JRuby世界中释放了Apache Mahout的力量

    JRuby Mahout Jruby Mahout是一颗宝石,它在JRuby世界中释放了Apache Mahout的力量。 Mahout是用Java编写的高级机器学习库。 它大规模地处理了建议,聚类和分类机器学习问题。 到目前为止,在Ruby项目中很难使用它...

    jruby1.7.8版本呢

    jruby是一个ruby的解析器,可将ruby解析为java文件,jruby作为ruby解析器时刻调用java代码

    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 官方更新...

    Deploying with JRuby: Deliver Scalable Web Apps using the JVM

    Deploying with JRuby: Deliver Scalable Web Apps using the JVM

    hbci4jruby:JRuby 的 HBCIFinTS 库。 基本上是围绕 HBCI4Java 的包装器

    hbci4jruby 待办事项:写一个宝石描述 发展 JAR 文件是使用。 安装 将此行添加到应用程序的 Gemfile 中: gem 'hbci4jruby' 然后执行: $ bundle 或者自己安装: $ gem install hbci4jruby 用法 TODO:在...

    jruby-1.3.1.jar

    jruby-1.3.1.jar包 解决org.jruby.exceptions.JumpException 等报错

    用JRuby读取Excel文件

    NULL 博文链接:https://renzhen.iteye.com/blog/689432

    jruby_windows_1_6_4安装文件

    jruby是从官网上downLoad的,可以在ruby程序中调用Java类库,也可以在Java程序中调用ruby类库,两者使用都相当方便,需要的可以下载尝试。

Global site tag (gtag.js) - Google Analytics