我在下面有一台非常简单的服务器(或者无论如何都是一台服务器的开始),如果您向它发出请求,它将接收数据,并返回一条消息,说“这是一个响应”,等待5秒钟,然后在超时时关闭连接,并发送一条消息告知您。
如果我运行下面的类,然后再运行curl
,它将按预期运行:
但是,我想使用函数或方法创建响应。这就是要注意的问题:如果我先叫build_response()
,然后再叫curl
,则发生的事情是:
更奇怪的是,如果我调用此build_response()
方法,但不将结果分配给响应,它将正常工作。我唯一遇到的问题是是否尝试通过.sendall()
返回方法的结果。那到底是怎么回事? Python中的方法是否与socket
共享缓冲区?还是我缺少明显的东西?我也在类之外使用函数进行了尝试,并得到了相似的结果。
import socket
class Server (object):
def run(self, host = None, port = None):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
while True:
conn, addr = s.accept()
conn.settimeout(5.0)
keep_alive = True
while keep_alive:
try:
data = conn.recv(1024)
if not data:
continue
response = b'here is a response\n'
#response = self.build_response()
conn.sendall(response)
except socket.timeout:
conn.sendall(b"closing connection\n")
conn.close()
keep_alive = False
def build_response(self):
return b'here is a better response\n'