vlambda博客
学习文章列表

董付国Python视频大讲堂

您想知道的人工智能干货,第一时间送达

                         

董付国Python视频大讲堂

视频内容选自如上图书:

视频案例内容:

 一般来说,客户端连接服务端之后每次通信只发送少量数据,完成会话之后立刻断开连接释放资源,需要时再次发起连接请求,这样可以减轻服务端压力。但建立连接和释放连接本身也是需要时间的,如果频繁创建连接和释放连接反而会浪费服务器资源,所以有些场合中需要长时间保持连接。默认情况下,如果对方长时间没有收发数据,TCP连接会自动断开,以免服务端长期存在半开放连接浪费资源。如果需要保持长时间,需要显式设置套接字为长连接模式。编写程序,使用TCP协议进行通信,并且使得TCP连接能够长时间保持存活。

董付国Python视频大讲堂

示例代码如下:

1)服务端代码

import socket

from struct import unpack

 

sockServer =socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sockServer.bind(('', 6666))

sockServer.listen(1)

 

conn, addr = sockServer.accept()

# 为客户端套接字开启长连接

# 保活设置只需要在一端启用就可以,不需要在服务端和客户端都设置

# 可以注释掉下面两行代码再运行,对比运行结果,理解保活机制的作用

conn.setsockopt(socket.SOL_SOCKET,socket.SO_KEEPALIVE, True)

conn.ioctl(socket.SIO_KEEPALIVE_VALS,

            (1,         # 开启保活机制

             60*1000,   # 60秒钟后如果对方还没有反应,开始探测连接是否存在

             30*1000)   # 30秒钟探测一次,默认探测10次,失败则断开

            )

while True:

   # 这里没有考虑高并发网络服务器,假设一次可以接收完数据

   # 接收4个字节,解包为整数,表示对方要发送的字节串长度

   data_length = conn.recv(4)

   if not data_length:

       conn.close()

       break

   data_length = unpack('i', data_length)[0]

   data = conn.recv(data_length).decode()

   print(data)

2)客户端代码

import socket

from time import sleep

from struct import pack

from datetime import datetime

 

sockClient =socket.socket(socket.AF_INET, socket.SOCK_STREAM)

 

try:

   # 实际运行时建议使用两台计算机进行测试

   # 一台计算机运行服务端,一台计算机运行客户端

   sockClient.connect(('127.0.0.1', 6666))

except:

   print('服务器不存在。')

   exit()

 

for i in range(5):

   msg = str(datetime.now())[:19]

   print(msg)

   msg = msg.encode()

   sockClient.sendall(pack('i', len(msg)))

   sockClient.sendall(msg)

   # 每隔6分钟发送一次数据

   sleep(360)

 

sockClient.close()

董付国Python视频大讲堂


3-6  开启保活机制时的运行过程

董付国Python视频大讲堂


3-7  没有开启保活机制时的运行过程

董付国Python视频大讲堂

董付国,山东省一流本科课程“Python应用开发”负责人,山东省高等教育优秀教材《Python程序设计基础(第2版)》作者,清华大学出版社3本畅销教材作者,华为技术有限公司独立顾问,阿里云天池等多个平台合作伙伴,全国高等院校计算机基础教育研究会“教育信息化”专业委员会委员,机械工业出版社计算机分社成立20周年本科教材“金牌作者”。出版的Python系列教材被国内超过800所高校选用,国家图书馆和各省市图书馆以及学校图书馆馆藏,累计印刷超过120次。





往期精彩必读文章(单击就可查看):

1.

2.

3. 

4.

5.

6.

7.

8.

9. 

10.

11.

12.