Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在尝试使用python超库创建一个http2多客户端服务器。它只完成第一个请求_Python_Select_Socketserver_Python Sockets_Hyper - Fatal编程技术网

我正在尝试使用python超库创建一个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/)

我能够使用本教程为http2提供服务。这个版本很好用。但由于阻塞套接字,该服务器一次只能为一个客户机提供服务。 然后,我根据
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]]