Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 如何使spydlay模块像httplib/http.client一样工作?_Python_Python 3.x_Spdy - Fatal编程技术网

Python 如何使spydlay模块像httplib/http.client一样工作?

Python 如何使spydlay模块像httplib/http.client一样工作?,python,python-3.x,spdy,Python,Python 3.x,Spdy,我必须测试基于Jetty的服务器。该服务器可以使用自己的协议HTTP、HTTPS,最后它开始支持SPDY。我有一些基于http的压力测试。client——每个线程以相似的URL开始(查询字符串中的一些数据是可变的),将执行时间添加到全局变量中,每隔几秒钟显示一些统计信息。代码如下所示: t_start = time.time() connection.request("GET", path) resp = connection.getresponse() t_stop = time.time()

我必须测试基于Jetty的服务器。该服务器可以使用自己的协议HTTP、HTTPS,最后它开始支持SPDY。我有一些基于http的压力测试。client——每个线程以相似的URL开始(查询字符串中的一些数据是可变的),将执行时间添加到全局变量中,每隔几秒钟显示一些统计信息。代码如下所示:

t_start = time.time()
connection.request("GET", path)
resp = connection.getresponse()
t_stop = time.time()
check_response(resp)
QRY_TIMES.append(t_stop - t_start)
使用本机协议共享的客户端
httplib
API,因此
connection
可能是本机的,
HTTPConnection
HTTPSConnection

现在我想使用模块添加SPDY测试。但是它的接口是不透明的,我不知道如何将它的不透明性变成类似于
httplib
接口的东西。我已经基于示例创建了测试客户端,但当
spdylay.urlfetch()
的第二个参数是类名而不是对象时,我不知道如何在测试中使用它。我已经将测试添加到类的
on_close()
方法中,该类扩展了
spdylay.BaseSPDYStreamHandler
,但它与其他测试不兼容。如果它是实例,我将在调用
spdylay.urlfetch()之外使用它


如何在基于
httplib
接口的代码中使用
spydlay

我唯一的想法是使用全局字典,其中
url
是键,
handler
对象是值。这并不理想,因为:

  • 具有相同
    url
    的新查询将覆盖以前的响应
  • 很容易忘记从全局字典中释放
    处理程序
但它是有效的

import sys
import spdylay

CLIENT_RESULTS = {}


class MyStreamHandler(spdylay.BaseSPDYStreamHandler):
    def __init__(self, url, fetcher):
        super().__init__(url, fetcher)
        self.headers = []
        self.whole_data = []

    def on_header(self, nv):
        self.headers.append(nv)

    def on_data(self, data):
        self.whole_data.append(data)

    def get_response(self, charset='UTF8'):
        return (b''.join(self.whole_data)).decode(charset)

    def on_close(self, status_code):
        CLIENT_RESULTS[self.url] = self


def spdy_simply_get(url):
    spdylay.urlfetch(url, MyStreamHandler)
    data_handler = CLIENT_RESULTS[url]
    result = data_handler.get_response()
    del CLIENT_RESULTS[url]
    return result


if __name__ == '__main__':
    if '--test' in sys.argv:
        spdy_response = spdy_simply_get('https://localhost:8443/test_spdy/get_ver_xml.hdb')

我希望有人能做得更好。

Jetty还提供了一个可用于负载测试的spdy客户端,例如:。我已经有了正在工作的spdy客户端:
spydlay
可以工作,但工作方式与
httplib
不同。这是我的问题,我想在我的测试应用程序中使用它,我希望它能与其他客户端类似。@ sBrime-我考虑使用JIT客户端测试JETTY服务器的想法:-我会用Jython尝试一下。它可能比spydlay更容易使用,因为它不使用本机库。