106 - 다중 프로세스 기반 시간 메시지 서버

1386 단어
1. 다중 클라이언트가 동시에 접근할 수 있도록 지원합니다. 2. 클라이언트가 서버에 메시지를 보낸 후 서버에서 메시지를 시간을 더하여 클라이언트에게 보냅니다. 3. 클라이언트가 끊어지면 좀비 프로세스가 발생합니다. 새 클라이언트가 연결될 때 모든 좀비 프로세스를 삭제합니다.
import socket
import os
from time import strftime

class TcpTimeServer:
    def __init__(self, host='', port=12345):
        self.addr = (host, port)
        self.serv = socket.socket()
        self.serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.serv.bind(self.addr)
        self.serv.listen(1)

    def chat(self, c_sock):
        while True:
            data = c_sock.recv(1024)
            if data.strip() == b'quit':
                break
            data = '[%s] %s' % (strftime('%H:%M:%S'), data.decode('utf8'))
            c_sock.send(data.encode('utf8'))
        c_sock.close()

    def mainloop(self):
        while True:
            cli_sock, cli_addr = self.serv.accept()
            pid = os.fork()
            if pid:
                cli_sock.close()
                while True:
                    result = os.waitpid(-1, 1)[0]  # waitpid 
                    if result == 0:
                        break
            else:
                self.serv.close()
                self.chat(cli_sock)
                exit()

        self.serv.close()

if __name__ == '__main__':
    s = TcpTimeServer()
    s.mainloop()

좋은 웹페이지 즐겨찾기