在 Go 中使用 TCP keepalive · Felix Geisendörfer

在 Go 中使用 TCP keepalive · Felix Geisendörfer


在 Go 中使用 TCP keepalive · Felix Geisendörfer

发表:

如果您曾经编写过一些 TCP 套接字代码,您可能会想:“如果拔掉网线或远程计算机崩溃,我的连接会发生什么情况?”。

简短的回答是:什么也没有。连接的远端将无法发送 FIN 数据包,本地操作系统也不会检测到连接丢失。因此,由您作为开发人员来解决这种情况。

在 Go 中,您可以使用多种方法来帮助解决此问题。也许第一个要考虑的是 SetReadDeadline net.Conn 接口的方法。假设您的连接预计会定期接收数据,您可以简单地将超时读取视为相当于 io.EOF 错误和 Close 连接。许多现有的 TCP 协议通过定义某种心跳机制来支持这种错误处理方式,该机制要求每个端点定期发送 PING/PONG 探测,以便检测网络问题以及服务运行状况1。此外,此类心跳还可以帮助处理寻找网络活动以确定连接健康状况的代理服务器。

因此,如果您的协议支持心跳,或者您有能力将心跳添加到自己的协议中,那么这应该是解决未插入网线场景的首选。

但是,如果您无法控制协议并且不支持心跳,会发生什么情况?

现在是时候了解 TCP keepalive 以及如何在 Go 中使用它了。 TCP keepalive 在 RFC 1122 中定义,并不是 TCP 规范本身的一部分。可以为单个连接启用它,但默认情况下必须关闭。启用它将导致网络堆栈在默认持续时间(必须不少于两个小时)后探测空闲连接的运行状况。探测数据包将不包含任何数据2,并且未能回复单个探测不能被解释为死连接,因为单个探测数据包没有可靠地传输。

Go 允许您使用以下命令启用 TCP keepalive net.TCPConnSetKeepAlive。在 OSX 和 Linux 上,这将导致在连接空闲 2 小时后以 75 秒的间隔发送最多 8 个 TCP keepalive 探测。或者换句话说, Read 将返回一个 io.EOF 2 小时 10 分钟后出现错误 (7200 + 8 * 75)。

根据您的应用程序,超时可能会太长。在这种情况下你可以打电话 SetKeepAlivePeriod。然而,目前此方法对于不同的操作系统表现不同。在 OSX 上,它将修改发送探测之前的空闲时间。然而,在 Linux 上,它将修改空闲时间以及发送探测的时间间隔。所以打电话
SetKeepAlivePeriod 使用 30 秒的参数将导致 OSX 上的总超时为 10 分 30 秒 (30 + 8 * 75),但在 Linux 上将导致 4 分 30 秒 (30 + 8 * 30)。

我发现这种情况相当令人不满意,因此我最终创建了一个名为 tcpkeepalive 的小包,它可以为您提供更多控制:

kaConn, _ := tcpkeepalive.EnableKeepAlive(conn)
kaConn.SetKeepAliveIdle(30*time.Second)
kaConn.SetKeepAliveCount(4)
kaConn.SetKeepAliveInterval(5*time.Second)

目前仅支持 Linux 和 OSX,但我很乐意合并其他平台的拉取请求。如果 Go 核心团队有兴趣,我也会尝试将这些新方法贡献给 Go 本身。

如果您认为本文有用、有任何疑问或发现任何错误,请告诉我,以便我纠正它们。

附录

  1. 调整心跳机制以尽早检测故障并降低误报率是一件棘手的事情。查看 phi 应计故障检测器以获得统计上合理的模型,以及 Damian Gryski 的 go-failure 实现。不幸的是,我无法想到将它与 TCP keepalive 一起使用。

  2. 根据 RFC 1122,保活探针可能包含单个垃圾八位组,以与损坏的实现兼容。但是,我不确定这是否被操作系统网络堆栈过滤掉,如果您知道,请发表评论。

——菲利克斯·盖森多夫


通过 RSS 或电子邮件订阅此博客,或者通过以下方式获取我的小更新 叽叽喳喳





Source link

Postagens Similares

  • 如果你接受了黄鼠狼的工作,那么你一定就是黄鼠狼

    尼克·比尔顿. (照片:盖蒂) 只有几个原因可能会导致您受聘从事一项您显然不具备资格的有声望的工作。一是“他们已经认可了你的天才”。如果你是这个人,那么你一定会强烈地得出结论,认为这就是原因。但这很少是解释。 另一种可能性是“雇用你的人是个白痴”。发生这种情况。许多现任美国内阁部长都是通过这种方式获得职位的。 不过,最可能的原因——这个原因常常让其他原因黯然失色——是“你愿意做即将到来的肮脏和令人厌恶的事情。”这就是为什么高层的奇怪招聘总是引起所有其他员工的恐惧。当然,也许你是一颗隐藏的宝石,但奥卡姆剃刀说你可能只是一个打手。 尼克·比尔顿(Nick Bilton)是《纽约时报》和《名利场》的前科技作家,也是几部纪录片的制作人。 刚刚受聘 担任《60分钟》新任主持人。当然,比尔顿拥有成功的媒体生涯,但他成功的本质从来不是“他是一个超级人物”。 聪明的 记者”,也从来没有“他在电视新闻方面经验丰富”。我从来不觉得有必要密切关注他的作品,所以我不想不公平地讽刺他,但他在我心目中一直被归入“那些因为付出了很多努力而拥有时尚眼镜而成功的人”的类别。 (这将带你 远的,如果你在正确的房间里。)雇用尼克·比尔顿来领导电视新闻史上最有传奇色彩和最相关的调查节目有点像雇用 NASCAR 车手作为通用汽车公司的首席执行官。我的意思是,是的,你在该领域有一些经验,但是………………。 这项工作还伴随着很多背景,这些背景如今笼罩在哥伦比亚广播公司总部上空,就像哥斯拉即将喷火一样。大卫·埃里森,世界上最富有的人之一的富有的孩子, 通缉 政府批准了派拉蒙和华纳兄弟的合并,因此他决定,作为一个经过深思熟虑的商业决策,剥夺哥伦比亚广播公司新闻的可信度,使其更讨好特朗普政府,为了完成这项任务,他让巴里·韦斯负责该网络,而她已经在羞辱和毁掉该机构的路上了。作为哥伦比亚广播公司新闻新闻形象皇冠上的明珠,《60 分钟》可信度的不断瓦解尤其引人注目。巴里轻而易举地介入并开始出于政治原因干预报道 射击 记者们提出反对,并在几个月内普遍摧毁了花了几十年时间建立起来的编辑声誉。种种迹象表明,《60 分钟》正在转变为更像哥伦比亚广播公司《周日早间》的节目——一档讲述小猫、名人的精彩故事以及美国有趣的琐事的节目,但不会冒犯任何拥有可能影响大卫·埃里森商业利益的权力的人。 (我不会太担心哥伦比亚广播公司成为另一个福克斯新闻。创建福克斯新闻的罗杰·艾尔斯是一个天才——一个邪恶的天才,但在为了政治目的而操纵电视媒体的实践中仍然是一个天才。巴里韦斯不是这样的天才。哥伦比亚广播公司新闻更有可能被变得愚蠢和毫无意义,而不是被转变为一个复杂的右翼宣传机构。) 分享 所以你可以想象,哥伦比亚广播公司新闻台的所有真正记者,尤其是《60 分钟》的记者,都处于紧张状态。尼克·比尔顿进来了,他是一个 精心修剪的胡茬 没有电视新闻编辑室的经验,好像一切都很好,很花花公子,他用一个 员工备忘录 上面写着这样的话,“在《60 分钟》的第一集中,迈克·华莱士说:‘如果这个广播达到我们希望的效果,它将报道现实。’”我想不出比这更好的 60 分钟北极星了。最重要的是,这意味着在故事选择、剪辑室和广播中对公平性的承诺。” 这是一个打手的话。这份备忘录上飘扬的红旗比苏联阅兵还要多。嘿嘿!让我提两个。首先,最引人注目的是:如果你走进一家重视编辑可信度的新闻编辑室,而最近编辑可信度被巴里·韦斯打着“公平”的幌子搞砸了,而你把“公平”作为备忘录的中心,那么你就是在以一种不太微妙的方式告诉每个人,你在那里继续搞破坏编辑可信度的公司项目。其次,也是稍微微妙一点的——比尔顿没有直接提及哥伦比亚广播公司每位记者心目中最重要的上下文怪物,从而暴露了自己是一个暴徒、一个软弱的小贩、一个公关人员、一个混淆者;与《60 分钟》的初衷背道而驰。 新闻业——真正的新闻业——首先对废话过敏。废话是新闻业的死敌。真正的新闻渴望成为废话的对立面。你可以成为一名伟大的记者,不需要有吸引力、友善、讨人喜欢、有魅力,只要你有决心铲除并揭露任何发现的废话。确实,很多记者都不讨人喜欢 因为 他们有这种品质。强有力的调查性新闻行动的理想领导者是一个聪明、有干劲、在任何其他情况下几乎都找不到工作的人,因为他们对用来掩盖富人和有权势者谎言的企业细节怀有病态的仇恨。愿意故意忽视亿万富翁老板破坏性的政治倾向可能对大多数职业都有好处,但如果你的职业应该涉及做真正的新闻工作,那就是一个非常糟糕的迹象。 如果你决定不提倡和捍卫废话,有些工作将不会提供给你。如果你决定从事安慰受苦者、折磨舒适者之类的职业,那么有些工作在任何情况下都不应该从事。如果你有自尊的话就不会。如果你关心我们所有人一直说我们关心的任何事情,那就不会了。这并不是什么高尚的言辞,旨在暗示记者是英雄;这是成千上万未出名、也永远不会出名的记者在整个职业生涯中都遵守的底线标准。因为他们是记者!不然你为什么要这样做呢?对于其中 98% 的人来说——所有这些人永远不会在《纽约时报》或《60 分钟》这样著名的地方找到工作——这个行业是一个工资低、声望低、高度不稳定的行业。成为一名记者的唯一好处就是你可以对有权势的人说废话。如果你对此不感兴趣,那就做点别的吧! 一旦你接手了打手的工作,每个人都会知道你是一个什么样的人。高薪买不回尊重。 如果你不喜欢与政权结盟的亿万富翁购买并削弱主要媒体的事实,那就支持独立媒体。支持独立媒体。选择一些你喜欢的独立媒体,并付费订阅。新的、更好的媒体版本只有在您的支持下才会存在。读者付费支持的东西会生存,读者不付费支持的东西不会生存。我们都是这个舞台的参与者。如果《How Things Work》是您喜欢的独立媒体场所之一,请花一点时间支持我们。这里有两种好方法: 您可以成为付费订阅者;您可以向朋友赠送付费订阅礼物。对于所有已经成为付费订阅者的人,我衷心感谢你们。 赠送订阅礼物 Source link

  • Sweet Jeebus, MacOS 27 Golden Gate remove os ícones idiotas dos itens de menu

    Quarta-feira, 10 de junho de 2026 Talvez o pior crime de interface do usuário no MacOS 26 Tahoe tenha sido a decisão inexplicável de adicionar ícones inescrutáveis ​​e perturbadores ao lado de cada item na barra de menu. Você se lembrará de Jim Nielsen escrevendo sobre isso, descrevendo-o com razão exatamente como o tipo de…

  • 尼古湖麗思卡爾頓酒店 RAYA 晚餐

    RAYA 是理查德·桑多瓦爾 (Richard Sandoval) 的概念餐廳,提供泛拉丁沿海美食,採用可持續海鮮、當地農產品、天然有機肉類以及主廚桑多瓦爾 (Sandoval) 的招牌拉丁風味烹製而成。 2011 年,RAYA 被里維埃拉奧蘭治縣評為“年度最佳餐廳”。 RAYA 位於南奧蘭治縣的麗思卡爾頓酒店內。房間美麗、豪華、獨特。天氣好的時候,露台是更好的選擇,但餐廳內仍然可以欣賞到大海的全景。 菜單分為三個部分:共享、小盤、沙拉和湯以及特色菜。我們沒有選擇湯或沙拉,因為這些產品看起來並不那麼有趣。相反,我們專注於餐廳特色菜,從和牛韃靼牛肉開始。 和牛代表日本牛,但我非常懷疑牛肉來自日本。還是很嫩的,只是不是A5級別的。這道菜是在桌邊準備的,使用黑蒜蒜泥蛋黃醬、可尼雞、醃製蛋黃、醃芥末籽、綠橄欖醬和烤佛卡夏麵包。 我不知道為什麼這道菜是在桌邊做的。這不是什麼表演。他們可以輕鬆地在廚房準備好並帶到餐桌上,您不會錯過任何東西。 烤花椰菜配花生瓜吉洛醬和煙熏葡萄chimichurri。這是一道奇怪的菜。取整個花椰菜頭,但不要切碎。相反,將整個東西放在烤箱中烘烤,直到外面形成一層外殼,然後將其隱藏在醬汁中。奇怪但很好。 用蝦、珍寶蟹和龍蝦製成的海鮮玉米捲餅。塗上奶油瓜吉略醬,搭配傳家寶櫻桃番茄。我吃過的最好吃的辣醬玉米餅餡之一。這也是我吃過的最貴的玉米捲餅。 上面這道菜叫 Mariscos A Lo Macho,是秘魯傳統的海鮮醬,味道鮮美、爽口、香濃、微辣。它幾乎可以與任何海鮮搭配。在這種情況下,RAYA將醬汁與鱸魚、虎蝦和小頸貽貝搭配。尤卡、番茄和莎莎醬構成了這道菜。 奶油玉米醬上的扇貝和五花肉。配料都放在盤子的一側,讓我想知道另一側是否應該有什麼東西。扇貝和五花肉都非常嫩。 RAYA 的菜單上有四種甜點,我們決定品嚐其中兩種:桃子奶油凍糕和檸檬蛋糕。兩者都非常好,也是結束這頓飯的好方法。 四個人的晚餐每人100美元多一點,對於一家高級餐廳來說這個價格相當合理。如果您入住尼古湖麗思卡爾頓酒店(實際上位於達納角),那麼在 RAYA 享用晚餐應該成為您行程的一部分。 Source link

  • 隨著AI Slop變得越來越豐富,餐廳將走向客製化

    關於曼哈頓新餐廳 Somssi 在 Instagram 上發布的消息,最讓我感動的是它的製作方式如此出乎意料。照片中,一隻手拿​​著一塊花邊,背景是一輛粉藍色汽車的閃亮背景。訂製的蕾絲大約有明信片大小,上面用白線的環形漩渦印著餐廳的名字,下面用大字體縫著餐廳的地址和開幕日期。陽光透過蕾絲,在扇形邊緣的花飾上投下陰影。這個場景看起來是有形的,就像真實存在過的時刻一樣。它讓我停在了我的捲軸上。 「Somssi」是一個韓語單詞,指的是“隨著時間的推移而磨練出來的技能或訣竅,與您親手製作的東西有很大關係”,管理合夥人 Ahris Kim 解釋道。對於 Somssi 來說,這種手工製作的感覺延續到了標誌中,該標誌將餐廳的名稱縫在布料上,其定製字體旨在喚起亞洲書法的靈感。它的窗簾是用舊鉤針和蕾絲桌布製成的,前門的窗簾上用刺繡裝飾的剪紙拼出了餐廳的名字(它也一直是 Instagram 帖子的焦點)。金兒時最好的朋友瑪格麗特·穆扎 (Margaret Muza) 負責室內設計,採購老式玻璃器皿和小玩意。穆札的媽媽用她自己幾十年來收集的布料製作了窗簾。 Somssi 的窗簾採用復古面料製成,符合餐廳對手工元素的承諾。丹·安攝 我越來越多地在畫卷中被一些喚起相反感覺的東西所吸引:一種半失敗的厭惡,我將其歸因於帶有人工智慧生成的怪誕特徵的大量圖像。它們與手工製作相反,常常充滿錯誤,只有沒有真實人類經驗的技術才能製作出來:抵抗重力的三明治;玻璃杯中的雞尾酒投射出物理上不可能的陰影;餐館裡的活動傳單實在是太擁擠、太程式化了,以至於他們幾乎繞了一圈就回到了營地;夢幻般的場景,比如一隻貓拿著兩個炸玉米餅,如果由人想出現在開玩笑的人會上 在某些文化領域,對人工智慧圖像的強烈反對正在加劇。 「我寧願看到一張用 Sharpie 在一張紙上製作的海報,也不願看到人工智慧活動傳單」或「如果廣告是人工智慧,我就不會去你的餐廳」之類的情緒正在激增。 「最大摩擦」是作家凱瑟琳·傑澤-莫頓創造的術語,指的是對便利技術的拒絕,轉而採用更慢、更模擬的過程,它已經逃脫了遏制,逐漸意味著選擇前互聯網時代的創造和解決問題的方式的普遍選擇。從這個意義上說,它可以指的是手工製作而不是人工智慧生成的選擇。 即使不公開 反彈,至少存在一個充滿摩擦的 反應 現在設計文化中正在發生人工智慧突然佔據主導地位的情況。攝影師 Szilveszter Makó 以其對荒謬的物理道具和日光等「真實材料」的依賴而聞名,近幾個月來,他的作品席捲了時尚界。我在類似出版物的新視覺效果中看到了類似的精神 享受你的食物,最近採用了一些創造性的元素,這些元素明確了物理的、現實生活中的努力,比如一篇關於舉辦觀看派對的文章中的定格動畫,其特點是邊緣搖晃的剪紙。 我想知道,在人工智慧的早期,其不可避免的豐富性是否最終會導致模擬、物理和明確的人造物的重新估值,事實上,這似乎已日益成為現實。以新英格蘭雜貨連鎖店 Market Basket 為例,該公司最近發布了限量版的每周宣傳冊,該宣傳冊完全由藝術家凱蒂·克里斯滕森 (Katie Christensen) 手繪。這讓人回想起商店早期的日子,當時傳單都是由人畫的。 或者以田納西州約翰遜城的 Fearless Coffee 為例,該咖啡店在今年夏天稍早發布了一系列宣傳其新菜單的圖片。 「目前,我們的世界充斥著數位噪音和內容。人工智慧宣傳片和圖形佔據主導地位,」該商店在 Instagram 上寫道。為了在污水中脫穎而出,這家商店委託攝影師 Jamey Booher 拍攝了一張照片,旨在讓人們“回到(人工智能)存在之前的時代”,例如,在一個讓人想起 90 年代末夏天、盒式磁帶等的場景中擺出一杯香蕉拿鐵的姿勢。這一姿態(和立場)並沒有被忽視,它引起了像我這樣只從“馬車車輪”中了解約翰遜城的人的關注,並似乎成為該商店有史以來最受歡迎的帖子。 多倫多一家新開的日本餐廳 Shinji 透過書法家 Sylvia…

  • 支持人工智能的自助软件 |丹尼尔·米斯勒

    人工智能在 2025 年带来的最大变化之一是没有足够多的人谈论。 许多过去为健身应用程序、分析软件或其他软件付费的人只是为自己编写了更好的版本。 我们过去常常必须在一无所有和花一大笔钱买一些不太合适的东西之间做出选择。 其中很大一部分是希望您可以从该应用程序中获得此功能,并从该应用程序中获得此功能,并且是免费的。 这是不可能的。 现在,人们可以真正制作自己的应用程序,该应用程序具有所有功能,并且不需要花费任何费用。 创意解锁 由于多种原因,这非常令人兴奋。 首先,他们实际上可以出售该应用程序,因为这是他们认为更好的产品版本。 但更大的影响是 人们的创造力正在以一种前所未有的方式被释放。 作为一个物种,我们从来无法想象某些事物的存在。 而这整件事才刚刚开始。 Source link

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *