server.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:pythoners 作者: mlyangyue 项目源码 文件源码
def run():
    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    serversocket.bind(('127.0.0.1', 18080))
    serversocket.listen(5)
    serversocket.setblocking(0) #???????
    epoll = select.epoll()  # ????epoll??
    epoll.register(serversocket.fileno(), select.EPOLLIN)  # ????serversocket.fileno?????event
    try:
        count = 0
        while True:
            events = epoll.poll()  # ???fileno??
            count += 1
            for fileno, event in events:
                if fileno == serversocket.fileno():  # ????fileno????,??fileno?????event
                    connection, address = serversocket.accept()
                    connection.setblocking(0)
                    epoll.register(connection.fileno(), select.EPOLLIN)
                    connections[connection.fileno()] = connection
                    requests[connection.fileno()] = b''
                    responses[connection.fileno()] = b""
                    print "new conn.fileno is %s" % connection.fileno()
                elif event & select.EPOLLIN:  # ??fileno??event,???????,????fileno??event,????????
                    print "read event is happing"
                    requests[fileno] += connections[fileno].recv(1024)
                    epoll.modify(fileno, select.EPOLLOUT)
                    print('-' * 40 + '\n' + requests[fileno].decode()[:-2])
                elif event & select.EPOLLOUT:  # ??fileno????,?????????
                    if responses[fileno]:
                        byteswritten = connections[fileno].send(responses[fileno])
                        responses[fileno] = responses[fileno][byteswritten:]
                        if len(responses[fileno]) == 0:
                            epoll.modify(fileno, select.EPOLLOUT)  # ???????????,????????event
                            print "change event to write"
                elif event & select.EPOLLHUP:
                    epoll.unregister(fileno)
                    connections[fileno].close()
                    del connections[fileno]
                    print "event is HUP ===%s" % fileno
        pass
    except Exception, err:
        print traceback.print_exc()
    finally:
        epoll.unregister(serversocket.fileno())
        epoll.close()
        serversocket.close()
        print "finally"
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号