我正在尝试使用python超库创建一个http2多客户端服务器。它只完成第一个请求
我能够使用本教程为http2提供服务。这个版本很好用。但由于阻塞套接字,该服务器一次只能为一个客户机提供服务。 然后,我根据我正在尝试使用python超库创建一个http2多客户端服务器。它只完成第一个请求,python,select,socketserver,python-sockets,hyper,Python,Select,Socketserver,Python Sockets,Hyper,我能够使用本教程为http2提供服务。这个版本很好用。但由于阻塞套接字,该服务器一次只能为一个客户机提供服务。 然后,我根据select()systemcall查找多客户端服务器实现。本教程向我展示了如何做到这一点。我合并了这两个教程,创建了一个http2多客户端服务服务器。 这就是我的结局: server.py 如果我运行python server.py,并在另一个终端中运行hyper CLI工具,以发送http2请求(hyper--h2 GET)http://localhost:8080/)
select()
systemcall查找多客户端服务器实现。本教程向我展示了如何做到这一点。我合并了这两个教程,创建了一个http2多客户端服务服务器。
这就是我的结局:
server.py
如果我运行python server.py,并在另一个终端中运行hyper CLI工具,以发送http2请求(
hyper--h2 GET)http://localhost:8080/
)。第一个请求成功了,我可以看到生成的事件,超工具很好地显示了响应和退出。在再次发送相同的hyper命令之后,请求不会生成任何事件,CLI工具也会挂起。你能帮我解决这个问题吗?我能解决它
我必须在accept_包装函数中将http2连接的状态保存到一个字典中,其中的键是客户机套接字地址。在service_connection函数中,我使用适当保存的http2连接对象解析了数据,然后它生成了事件
在文件的开头:
h2conns = {}
accept\u包装函数accept\u包装的结尾:
h2conns[conn.getpeername()[1]] = h2InitConn
在服务连接功能中:
h2conn = h2conns[sock.getpeername()[1]]
h2conn = h2conns[sock.getpeername()[1]]