Python 聊聊socket中的listen()参数(数字)到底代表什么

作者:James Zeng 时间:2022-10-17 00:49:25 

疑问

Python 聊聊socket中的listen()参数(数字)到底代表什么

在调用socket的时候,我们会使用到listen()函数,里面有个参数叫backlog, 例如:socket.listen(5). 那么这个数字5到底代表什么意思呢?网上有很多种说法,讲的都是概念,很多都是复制粘贴,容易让人误解。

解答

下面使用具体的代码片段来讲解:

这是一个电脑本机模拟客服端及服务端的程序,主要功能是建立socket连接后,客户端输入关键字查询对应的段子,服务器端返回结果。服务器可以满足同时服务两个客户的查询操作此程序中还包含了信号量和多线程

Python 聊聊socket中的listen()参数(数字)到底代表什么

以listen(1),参数设置为1进行讲解,是不是将参数设置为1后,开启3个客服连接就会报错呢?并不是!

如下图所示:

Python 聊聊socket中的listen()参数(数字)到底代表什么

那么问题来了!

问题1:

如上例代码中,有listen(1),这个1是指什么?只能与1个socket建立链接吗? 为什么我用上面的代码可以创建大于1个的tcp连接却没报错,如果用网上其他人的说法理论上大于1个连接应该报错的!

因为:listen(n)传入的值, n表示的是服务器拒绝(超过限制数量的)连接之前,操作系统可以挂起的最大连接数量。n也可以看作是"排队的数量"

问题2:

既然没有报错,为什么没有打印用户3的地址?

因为:服务器正在处理用户1和用户2,没有空闲去接待用户3,所以用户3去排队了。

问题3:

为什么服务器能同时处理用户1和用户2?

因为:

Python 聊聊socket中的listen()参数(数字)到底代表什么

这里用到了多线程和信号量,信号量设置为2,也就是允许并发数为2,服务器开启了两个线程,能同时分别处理用户1和用户2。

来源:https://blog.csdn.net/HFZeng/article/details/93843442

标签:Python,socket,listen
0
投稿

猜你喜欢

  • Response.Flush的使用心得

    2010-04-08 12:57:00
  • IE的有条件注释详解(附实例代码)

    2009-03-31 13:01:00
  • PyQt5实现暗黑风格的计时器

    2023-07-07 02:49:30
  • Oracle中instr函数使用方法

    2023-07-23 19:14:06
  • 一篇文章带你学习python的函数与类

    2023-10-15 05:04:18
  • base href 使用方法详解

    2008-05-18 13:27:00
  • 基于ExtJs框架的B/S高级查询界面

    2008-10-07 18:05:00
  • 用browsercam做用户登录后页面的兼容性测试

    2008-12-29 12:05:00
  • 如何绕过ODBC直接访问SQL Server?

    2010-05-18 18:13:00
  • 终结IE6下背景图片闪烁问题

    2009-03-04 10:11:00
  • 10分钟学会Google Map API (一)

    2009-06-07 18:17:00
  • 详解MySQL数据库安全配置

    2010-01-26 15:19:00
  • 通用分页存储过程

    2007-11-28 13:08:00
  • Access下如何使用通用对话框

    2008-11-20 16:41:00
  • ASP 相关文章或者相关产品

    2011-03-30 11:12:00
  • python切换hosts文件代码示例

    2023-07-19 15:41:43
  • 浏览器是怎样工作的二:渲染引擎 HTML解析

    2012-05-09 20:34:20
  • 提高MySQL数据库查询效率的三个实用技巧

    2008-12-03 16:40:00
  • php实现将数组或对象写入到文件的方法小结【三种方法】

    2023-11-19 05:08:04
  • PHP实现sha-256哈希算法实例代码

    2023-05-25 01:05:23
  • asp之家 网络编程 m.aspxhome.com