- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在我的 python 脚本中,我使用这个命令激活了 TCP Keepalive:
x = s.setsockopt( socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
如果 5 分钟没有传输(*),我的目标是关闭套接字连接。我在 Windows 上工作,我的 python 脚本只接收而不向客户端程序传输任何数据。
我所知道的是,默认情况下,如果 2 小时内没有传输,那么只有我可以使用 try 和 except 关闭连接。我知道,对于 Windows,我可以通过转到注册表来手动减少等待时间。但是有没有一种方法可以让我从我的脚本中修改它?
(*) 这里的“不传输”是指“有东西悄悄地吃掉网络上的数据包”,而不是“我不想发送任何东西”。
最佳答案
您可以使用 setsockopt() 在已打开的套接字上设置 TCP keepalive 计时器。
import socket
def set_keepalive_linux(sock, after_idle_sec=1, interval_sec=3, max_fails=5):
"""Set TCP keepalive on an open socket.
It activates after 1 second (after_idle_sec) of idleness,
then sends a keepalive ping once every 3 seconds (interval_sec),
and closes the connection after 5 failed ping (max_fails), or 15 seconds
"""
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, after_idle_sec)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, interval_sec)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, max_fails)
def set_keepalive_osx(sock, after_idle_sec=1, interval_sec=3, max_fails=5):
"""Set TCP keepalive on an open socket.
sends a keepalive ping once every 3 seconds (interval_sec)
"""
# scraped from /usr/include, not exported by python's socket module
TCP_KEEPALIVE = 0x10
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
sock.setsockopt(socket.IPPROTO_TCP, TCP_KEEPALIVE, interval_sec)
对于 Windows 上的等效选项 refer to msdn .浏览 Python source ,看来你需要设置 SO_KEEPALIVE
与 sock.setsockopt
类似于在 Unix 中,并且 [可选?] 设置 SIO_KEEPALIVE_VALS
与 sock .ioctl
.
关于python - 如何使用 python 脚本更改 tcp keepalive 计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12248132/
几个月来我们遇到了一个奇怪的小问题: 我们集群上的负载(http、具有大量非常短(<100ms)请求的持久保持事件连接)分布非常不均匀。所有服务器都以相同的方式配置,但某些每秒推送数千个请求的连接最终
几个月来我们遇到了一个奇怪的小问题: 我们集群上的负载(http,具有大量非常短(<100 毫秒)请求的长期保持事件连接)分布非常不均匀。所有服务器都以相同的方式配置,但一些每秒推送数千个请求的连接最
List resultList = lists.iterator().next(); for (Iterator iterator = lists.iterator(); iterator.h
根据 PostgresSQL docs有参数 keepalives 和进一步的参数 keepalives_idle, keepalives_interval 和 keepalives_count 只有
我最近接手了一个 Android 项目。我们希望尝试加快我们拥有的同步过程。这是目前的代码: System.setProperty("http.keepAlive", "false"); 我没有写代码
我应该使用什么代码片段来配置普通的 Jersey Client 实例以“保持 Activity ”连接?谢谢! 最佳答案 假设您指的是 HTTP keep-alives,默认情况下支持它,并且可以通过
在套接字上的 accept() 之后,我正在尝试配置 TCP keepalive。 SockConnected = accept(SockListen, &RemoteAddr,
在 nginx.org 中,keepalive config 的默认值是 —,但我不太明白这是什么意思。 Syntax: keepalive connections; Default: — Co
我已经升级到 0.9.0.1,看起来很顺利,我的 meteor 网站运行良好。 但是,在对模板进行简单更改时(字面上更改跨度内的文本),我在服务器控制台中收到错误,然后服务器重新启动。 服务器控制台日
在 SignalR (1.2.2) 中,KeepAlive 和 ConnectionTimeout 之间有什么区别? 通过保持事件状态主动 ping 服务器,连接永远不会超时。那么Connection
我的 grunt 任务如下所示: grunt.registerTask "default", [ "clean:dist" # "useminPrepare" "copy:di
我管理着几个 DNN 门户,我需要一个解决方案来让它们在流量空闲时保持“活跃”。在给定的不活动时间后,IIS 将从内存中卸载 DNN 应用程序,这将影响第一个客户端请求的加载时间。 DNN 有一个“K
我正在尝试使用服务器发送事件传输查看从 Signalr 服务器发送的保持事件事件。我正在使用 Fiddler 来查看它,并且启用了“Stream”Fiddler 功能按钮......到目前为止我没有看
使用apache,当KeepAlive为Off时减少MaxClients是否合理?目前,MaxClients 设置为 150,这是 mpm-worker 的默认值。 nginx 为 apache 提供
我有一个 mediaOutput 标签,它的 createContent 属性要求支持 bean 处于某种状态。必须提供填充在 init 方法中的值列表。 因此,我为整个支持 bean 添加了一个 k
我设置了客户端和服务器之间有防火墙的设置。我连接到两个不同的服务器,即 A 和 B,数据可以在任何时间点从 A 或 B 流动,但一次只能流动一个。似乎我与服务器的连接每 2 小时 11 分 15 秒后
在 Android WebView 中创建 XMLHttpRequests 时,没有像看起来那样使用保活连接。 当请求频繁发出时,我的桌面浏览器都使用 keepalive(例如,在页面的 onload
场景如下: 有一个 http 反向代理,它有一个与应用程序服务器的持久连接池。它已经收到来自客户端的请求,并在检查连接是否打开后向后端发出相同的请求 与此同时,服务器在收到请求之前关闭了连接,代理因从
在他的article about preventing multiple instances Michael Covington 展示了一个应用程序的代码: static void Main()
当我执行 netstat -anto 时,我得到了以下输出 Proto Recv-Q Send-Q Local Address Foreign Address
我是一名优秀的程序员,十分优秀!