zoukankan      html  css  js  c++  java
  • python 并发socket

    import socket
    import selectors
    import threading
    import time
    selector = selectors.DefaultSelector()
    
    socket_server = socket.socket()
    address_server = ('0.0.0.0',8080)
    socket_server.bind(address_server)
    socket_server.listen(1000)
    
    
    def wokter(socket_ser):  #多线程套接字
        while True:
            massage = socket_ser.recv(1024)
            if massage:
                socket_ser.send(massage)
            else:
                socket_ser.close()
    
    while True:
        socket_ser, address = socket_server.accept()
        socket_thre =threading.Thread(target=wokter, args=(socket_ser,))
        socket_thre.start()
    
    
    def server_read(connect): #epoll的socket
        massage = connect.recv(1024)
        if massage:
            connect.send(massage)
        else:
            selector.unregister(connect)#清除注册
            connect.close()
    
    def accept(socket_server):
        socket_ser, address = socket_server.accept()
        socket_ser.setblocking(False)
        selector.register(socket_ser, selectors.EVENT_READ, server_read)#注册事件回调socket连接
    selector.register(socket_server, selectors.EVENT_READ, accept)#注册事件回调socket对象
    
    while True:
        events = selector.select()#查询所有准备好的事件,一个二元组列表
        for key,massk in events:
            callback = key.data  #拿到回调函数
            sock = key.fileobj   #拿到注册的那个socket
            callback(sock)       #回调执行
  • 相关阅读:
    linux之sed用法
    vim 设置tab空格个数
    centos 7远程登陆win10
    linux find命令学习
    CENTOS 7 修改默认启动内核
    Centos7更改默认启动模式
    centos 7创建桌面快捷方式
    修改centos中文为英文显示
    正则的sub
    超时或错误重试
  • 原文地址:https://www.cnblogs.com/arrow-kejin/p/8989930.html
Copyright © 2011-2022 走看看