防止在python SocketServer中关闭请求

The*_*eer 1 python sockets

我正在使用与Android连接的python套接字服务器并定期发送消息.我有一个问题,请求在每个发送的消息上关闭,我需要它保持打开,直到Android决定关闭它.

Curentlly它看起来像这样:

class SingleTCPHandler(SocketServer.StreamRequestHandler):
    def handle(self):
    try:
        while True:
            message = self.rfile.readline().strip()  # clip input at 1Kb            
            my_event = pygame.event.Event(USEREVENT, {'control':message})
            pygame.event.post(my_event)
    except KeyboardInterrupt:
        sys.exit(0)
    finally:
        self.request.close()
Run Code Online (Sandbox Code Playgroud)

我已经通过while True在我的handle()定义中添加一个来解决这个问题,然而,这被批评为一个糟糕的解决方案,正确的方法是覆盖process_requestshutdown方法.

尝试解决方案

while从代码中删除了代码,用netcat在本地连接到服务器,发送了一条消息,然后查看连接何时关闭.

我想看看连接关闭后的方法是什么,以确定我必须覆盖的内容.

我已经通过调试器步入serve_forever()并跟随它到这部分代码:

> /usr/lib/python2.7/threading.py(495)start()
    494         try:
--> 495             _start_new_thread(self.__bootstrap, ())
    496         except Exception:
Run Code Online (Sandbox Code Playgroud)

在第495行通过后(我无法进入),连接关闭.

我以某种方式怀疑通过套接字保持连接是如此喧嚣,这基本上是我们选择通过套接字进行通信,拥有连续连接而不是"每个已发送消息的一个连接"系统的原因.

关于实施或链接的想法?

Mar*_*nen 5

handle为每个客户端连接调用该方法,并在返回时关闭连接.使用while循环很好.客户端关闭连接时退出循环.

示例(Python 3语法):

class EchoHandler(socketserver.StreamRequestHandler):

    def setup(self):
        print('{}:{} connected'.format(*self.client_address))

    def handle(self):
        while True:
            data = self.request.recv(1024)
            if not data: break
            self.request.sendall(data)

    def finish(self):
        print('{}:{} disconnected'.format(*self.client_address))
Run Code Online (Sandbox Code Playgroud)