首页 > 编程语言 > 详细

单线程,单进程,非堵塞实现并发

时间:2019-09-09 01:31:15      阅读:88      评论:0      收藏:0      [点我收藏+]
import socket


def service_client(new_socket,request):
    # 接收浏览器的请求

    #request = new_socket.recv(1024)
    print(request)
    # 利用http协议给浏览器返回数据

    response = "HTTP/1.1 200 OK\r\n"  # 在python中\r\n表示一个空格
    response += "content-lenth:%d\r\n"%len("<h1>I love you<h1>")
    response += "<h1>I love you<h1>"

    new_socket.send(response.encode("utf-8"))



def main():
    # 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    # 绑定
    tcp_server_socket.bind(("", 7890))

    # 变为监听套接字
    tcp_server_socket.listen(128)
    # 将套接字改为非堵塞的方式
    tcp_server_socket.setblocking(False)
    tcp_server_list = list()

    while True:
        # 等待新客户端的链接
        try:
            new_socket, client_addr = tcp_server_socket.accept()
        except Exception as ret:
            pass
        else:
            new_socket.setblocking(False)
            tcp_server_list.append(new_socket)


        for client_socket in tcp_server_list:
            try:
                recv_date = client_socket.recv(1024).decode("utf-8")
            except Exception as ret:
                pass
            else:
                if recv_date:
                    service_client(new_socket,recv_date)
                else:
                    client_socket.close()
                    tcp_server_list.remove(client_socket)

    tcp_server_socket.close()


if __name__ == "__main__":
    main()

 

单线程,单进程,非堵塞实现并发

原文:https://www.cnblogs.com/tendresse/p/11489051.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!