我得到了 10 台新 PC,所有(据说)都新安装了 Windows 7 Pro,没有对它们进行任何其他操作。
我有一个程序,用 Delphi XE2 编码,使用 Indy 10 组件进行网络连接。我将我的 TIdTcpCleint 的“连接超时”和“读取超时”属性设置为 500ms,将“resuse socket”设置为“o/s dependant”(我还尝试将其设置为 No)并保留“使用 Nagle” (无论设置为 True 是什么(我也尝试过设置为 false)。
这就是问题所在:当我在这些 PC 上运行相同的 .EXE 并测试我拔出网络电缆的情况时,我的调试跟踪显示连接尝试/连接超时发生在同一秒或下一秒(带有粒度为 1 秒)- 但在其他情况下,我看到连接超时需要 20 或 21 秒。
虽然我没有看到任何 aps 安装,但其中一些 PC 似乎并不像声称的那样完全“全新安装”。也许有人安装了一些东西然后删除了它,也许他们试图调整性能。
在我在 10 台 PC 上重新安装 Windows 之前,有人可以建议去哪里查看吗?关于 TCP 客户端连接超时,20(或 21)秒响铃了吗?
[更新] 我正在尝试直接连接到一个特定的 IP 地址,所以我不确定 @Nikolai 检查 DNS 的建议是否相关。很抱歉最初没有提及这一点。
[upperdate] 程序不会尝试保持套接字打开。它会连接、发送一些数据并断开连接 - 对于每个新数据重复进行。
最佳答案
遗憾的是,这是按预期工作的。连接确实已经超时。 Indy 确定连接将在您要求的 500 毫秒内失败。但是,这并不能保证函数返回。
连接超时后,Indy 停止连接以释放其所有资源。它同步执行此操作。这意味着您最终会等待底层 TCP 操作失败。这通常需要 20 秒。
解决方法是在线程中调用connect。信不信由你,这就是 Indy 已经为实现超时所做的事情。但是,当它等待线程超时时,它会尝试关闭主线程中的连接。您需要将其推迟到工作线程。
至于为什么它在某些系统上会立即发生,而在其他系统上会在 20 秒后发生,这取决于精确的网络配置。例如,如果启用了 IPv6,堆栈可能会尝试使用 IPv6 到 IPv4 连接,并且即使物理接口(interface)已关闭,也可能不会报告关闭。无法保证立即检测到连接不可能性,您不应依赖它。
关于delphi - 当设置为 500 毫秒时,*某些* PC 上的 TCP 连接超时为 20 或 21 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12065700/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r