jjzjj

php - 数以千计的 TIME_WAIT 尽管有 SO_LINGER、关机等

coder 2024-04-06 原文

我在一个同时连接到许多 URL 的网站上工作(我们希望达到每分钟约 600 个),无论我尝试什么,总是有数千个 TIME_WAIT 仍然打开。我知道这些对 TCP 连接至关重要,但它们正在使用所有可用端口。 PHP 没有 SO_REUSEPORT,并且 SO_REUSEADDR 不适用于远程连接。这是代码的开头:

$s = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($s, SOL_SOCKET, SO_LINGER,array('l_linger'=>0, 'l_onoff'=>0)); //I have tried l_onoff=1 
socket_set_option($s, SOL_SOCKET, SO_RCVTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_SNDTIMEO,array('sec'=>0,'usec'=>500000));
socket_set_option($s, SOL_SOCKET, SO_KEEPALIVE,0);
socket_set_option($s, SOL_SOCKET, SO_REUSEADDR,1);
socket_set_nonblock($s);
socket_bind($s,$ip,0);
socket_connect($s,$host,$port);

$s 进入一个包含所有未决写入的数组,在写入之后我们调用 socket_shutdown($s,1);关闭套接字上的写入。然后在阅读之后我们:

socket_shutdown($s,2); socket_close($s);

所有的读取和写入都是在一个 while 循环中完成的,这个循环最多有 12 个并发连接,如果没有命中,那么它会继续并继续向数组添加另一个 URL。每个循环调用超时为 0 的 socket_select。

有人有什么建议吗?我想提高速度并减少出现在 netstat 中的 TIME_WAIT。

谢谢, 詹姆斯·哈蒂格

最佳答案

您可以将 HTTP header Connection: close 与您的请求一起发送,这将导致服务器在向您发送请求后发送 TCP FIN。因为另一方发送了第一个 FIN,所以在 TIME_WAIT 中等待的将是另一方,而不是你。

关于php - 数以千计的 TIME_WAIT 尽管有 SO_LINGER、关机等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2114368/

有关php - 数以千计的 TIME_WAIT 尽管有 SO_LINGER、关机等的更多相关文章

  1. ruby - 是否可以在不实际发送或读取数据的情况下查明 ruby​​ 套接字是否处于 ESTABLISHED 或 CLOSE_WAIT 状态? - 2

    s=Socket.new(Socket::AF_INET,Socket::SOCK_STREAM,0)s.connect(Socket.pack_sockaddr_in('port','hostname'))ssl=OpenSSL::SSL::SSLSocket.new(s,sslcert)ssl.connect从这里开始,如果ssl连接和底层套接字仍然是ESTABLISHED,或者它是否在默认值7200之后进入CLOSE_WAIT,我想检查一个线程几秒钟甚至更糟的是在实际上不需要.write()或.read()的情况下关闭。是用select()、IO.select()还是其他方法完成

  2. ruby - Time.to_i 是否总是以 UTC 返回自 EPOCH 以来的秒数? - 2

    无论时间在哪个时区表示,时区差异是否总是被忽略?直觉上,对于那些使用UTC+2的人来说,从EPOCH开始经过的秒数应该更高。然而,事实并非如此。 最佳答案 Epoch基于utc时区https://en.wikipedia.org/wiki/Unix_time它与您当前所在的时区无关。 关于ruby-Time.to_i是否总是以UTC返回自EPOCH以来的秒数?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.

  3. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  4. c - 我是如何让 gcc 生成 .bundle 而不是 .so 的? - 2

    我正在尝试编写一个Ruby扩展,而且我一整天都在成功编译我的nmatrix.so共享对象文件。但是,突然之间,它开始生成nmatrix.bundle,而根本没有任何.so文件。它没有给我任何链接器错误,所以我无法想象为什么会这样。我也没有更改myMakefileorextconf.rb中的任何内容.我一直通过rvm使用Ruby1.9.3p0。我已经尝试对当天的工作执行gitstashsave并编译一些我知道应该没有链接器错误的东西(产生.so的东西)更早。不幸的是,这也会生成一个.bundle文件。很明显,我做了一些事情——可能是无意中安装了一些东西——这改变了一些关键的GCC设置。这

  5. ruby - Ruby Time#dst 如何运行? - 2

    这可能是一个愚蠢的问题,表明我对夏令时的基础知识缺乏了解,但根据标题,Time.dst?如何知道时间对象确实是真还是假?大概这必须通过日期和时区的组合来辨别,但这没有意义,因为时区中的低纬度不使用夏令时?因此肯定它必须需要位置来识别#dst??我错过了什么? 最佳答案 为了处理时区和夏令时,Ruby和其他所有东西一样,是callinglocaltime_rCfunction.这将时间放入名为tm的C结构中其中包括一个名为isdst的字段。Ruby正在读取该标志。localtime_r首先通过从全局tzname变量获取您的时区来计算i

  6. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

  7. Ruby,从 Date.day_fraction_to_time 获取小时、秒和时间 - 2

    我找到了这个方法here.start=DateTime.nowsleep15stop=DateTime.now#minutesputs((stop-start)*24*60).to_ihours,minutes,seconds,frac=Date.day_fraction_to_time(stop-start)我有以下错误:`':privatemethod`day_fraction_to_time'calledforDate:Class(NoMethodError)我检查了/usr/lib/ruby/1.9.1/date.rb并找到了它:defday_fraction_to_time(

  8. c# - 以与 SO 在版本页面上相同的方式区分两个字符串的算法是什么? - 2

    我正在尝试按短语区分两个字符串,类似于StackOverflow在版本编辑页面上区分两个字符串的方式。执行此操作的算法是什么?是否有gems或其他标准库可以实现此目的?编辑:我见过其他差异算法(Differ与Ruby),它们似乎导致以下结果:>>o='nowisthetimewhenallgoodmen.'>>p='nowsometimethementimewhenallgoodmen.'>>Differ.diff_by_word(o,p).format_as(:html)=>"nowsomeistimethementimewhenallgoodmen."请注意每个单词的单词是如何区分

  9. ruby-on-rails - PHP 魔术方法 __call、__get 和 __set 的 Ruby 等价物 - 2

    我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob

  10. ruby - Lisp - 是否适合网络编程/应用程序(交互式)? ruby 的方式是? php的方式是? - 2

    Lisp是否适合Web编程/应用程序(交互式),就像ruby​​和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common

随机推荐