0
点赞
收藏
分享

微信扫一扫

多任务服务端的实现

蓝莲听雨 2022-04-29 阅读 50
import socket
import threading

# 专门用来处理客户端请求任务
def handle_client_request(new_client,ip_port):
    print("客户端的ip和端口号分别为:",ip_port)

    # 5.接受客户端的数据,实现循环接受客户端数据,接受一次不关闭
    while True:
        recv_data = new_client.recv(1024)
        if recv_data:
            print("接受的数据长度是:",len(recv_data))

            # 对二进制数据进行解码处理变成字符串
            recv_content = recv_data.decode("gbk")
            print("接受客户端的数据为:",recv_content,ip_port)

            # 6.发送数据
            send_content = "客户端你发送的数据我已经收到了,正在处理。。。"
            # 对字符串进行编码
            send_data = send_content.encode("gbk")
            # 发送数据到客户端
            new_client.send(send_data)
        else:
            print("客户端已经下线。",ip_port)
            break
    # 关闭服务端与客户端的连接,表示和客户端终止通信
    new_client.close()

if __name__ == '__main__':
# 1.创建tcp服务端套接字
    tcp_sever_socket =  socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.设置端口号复用,让程序退出端口号立即释放
    tcp_sever_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)

#  绑定端口号
    tcp_sever_socket.bind(("",9090))


# 3. 设置监听
    tcp_sever_socket.listen(128)

# 4.等待接受客户端的连接请求   (不管有多少请求都在线等待)
    while True:
        new_client,ip_port = tcp_sever_socket.accept()

        # 当客户端和服务端建立连接成功之后,创建子线程,让子线程专门负责接受客户端的信息
        tcp_thread = threading.Thread(target=handle_client_request,args=(new_client,ip_port))
        # 设置守护主线程,主线程退出后直接销毁子线程
        tcp_thread.setDaemon(True)
        tcp_thread.start()
        ```
        多任务服务端的实现,可以实现比如多个用户同时或者任意时刻向服务端发送请求,服务端可以处理不同用户的请求,而不是单任务的处理。
        实现多任务的处理,在多任务我们自然而然想多了多进程和多线程,但是由于线程更加节省系统资源,所以选择用线程进行多任务的实现更加合理。
        理解本篇文章可以搭配上一篇单任务服务端的实现做对比,自己亲自敲一遍效果会更好。
        注释也写的比较清晰吧,写的不对的地方欢迎各位大佬指出,互相学习,共同进步~嘿嘿
举报

相关推荐

0 条评论