如何统计TCPServer中连接的客户端数量?
我正在使用Pythons SocketServer.ThreadingTCPServer。现在我想知道在某个时刻有多少客户端连接。
怎么解决这个问题呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在使用Pythons SocketServer.ThreadingTCPServer。现在我想知道在某个时刻有多少客户端连接。
怎么解决这个问题呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
SocketServer.ThreadingTCPServer 为每个客户端连接交换一个新线程,因此了解某一时刻连接的客户端数量与了解该时刻有多少线程处于活动状态相同,因此只需使用 threading.activeCount 和客户端的数量将是:
当然,如果有其他部分,这不会给你正确的结果你的交换线程的代码同样,为了解决这个问题,您可以通过为客户端添加计数器来覆盖 process_request() 和 process_request_thread() 方法。
从示例此处我编写了这段代码来测试这两种方法
输出:
以及你可以看到第二种方法给出了更精确的值,两种方法之间的区别在于,因为我的服务器正在使用线程运行,所以我总是+1线程来解释1的区别。
希望这可以有所帮助:)
SocketServer.ThreadingTCPServer swap a new thread for each client connection so knowing the number of client connected in a certain moment is the same as knowing how many thread are alive in that moment , so just use threading.activeCount and the number of client will be:
Of course this will not give you correct result if there is other part of your code that swap thread too, so to fix that you can overwrite the process_request() and process_request_thread() methods by adding a counter for clients.
From the example here i wrote this snippet of code to test the two methods
Output :
Well as you can see the second way give more precise value, and the difference between the two ways is that because my server is running using a thread so i have always +1 thread that explain the difference of 1.
Well hope this can help :)
在“服务”客户端的线程中,使用一些全局计数,该计数在客户端连接时增加,在断开连接时减少。
如果您想从操作系统级别进行计数,请使用
nestat -an
以及适当的grep
过滤器和wc -l
(在 Windows 上使用>grep
和wc
)In a thread that "serves" client use some global count that is increased when client connects and decreased when disconnects.
If you want to count from OS level then use
nestat -an
with propergrep
filter andwc -l
(on Windows uses ports ofgrep
andwc
)