【发布时间】:2019-09-08 10:52:30
【问题描述】:
我们有一个 Python 套接字线程服务器示例。这是一个稍微修改过的版本 https://stackoverflow.com/a/23828265/2008247。该示例有效,我的测试证实它比阻塞服务器执行得更好。
但在示例中,套接字和连接对象并未关闭。两个对象都有close() 方法。 (连接上的 close 方法仅在 Exception 上调用。我希望在每个连接结束时调用它。)我们不需要以某种方式调用它们吗?如果有,怎么做?
#!/usr/bin/env python
import socket
import threading
class ThreadedServer():
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.host, self.port))
def listen(self):
self.sock.listen(5)
while True:
con, address = self.sock.accept()
con.settimeout(60)
threading.Thread(target=self.listenToClient,
args=(con, address)).start()
def listenToClient(self, con, address):
while True:
try:
data = con.recv(1024)
if data:
# Set the response to echo back the recieved data
response = data
con.send(response)
else:
raise Exception('Client disconnected')
except:
con.close()
return False
def main():
ThreadedServer('', 8001).listen()
if __name__ == "__main__":
main()
【问题讨论】:
标签: python multithreading sockets python-multithreading