2016-04-27 74 views
0

我想通过unix套接字连接到我的测试fcgi应用程序。服务器非常简单,从烧瓶文档中获取http://flask.pocoo.org/docs/0.10/deploying/fastcgi/flup和socket连接

客户端代码是我的。我希望通过socket.send发送示例HTTP请求,并接收带有“Hello World”的HTTP响应。问题是客户端挂在s.recv(1024)并没有任何反应。

服务器代码:

def myapp(environ, start_response): 
    start_response('200 OK', [('Content-Type', 'text/plain')]) 
    return ['Hello World!\n'] 

if __name__ == '__main__': 
    from flup.server.fcgi import WSGIServer 
    WSGIServer(myapp, bindAddress="fcgi.sock").run() 

客户端代码:

# -*- coding: utf-8 -*- 
import socket 

req = """GET/HTTP/1.1 
Host: localhost\r\n\r\n""" 

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) 
s.settimeout(1.0) 

s.connect("fcgi.sock") 
s.send(req) 

data = s.recv(1024) 
s.close() 

print('Received ' + repr(data)) 

我测试,以打通nginx的反应,和它的工作很好,但使用套接字我可以不执行此操作。有谁知道我的客户端代码有什么问题?

回答

1

如果有人有兴趣,我想清楚是什么问题。

认为FCGI服务器会收到原始的HTTP请求字符串并对其进行相应的回应,这种想法太天真了。 FCGI服务器不是为了处理HTTP而设计的,它用于FCGI请求,它具有其他格式:http://www.mit.edu/~yandros/doc/specs/fcgi-spec.html

这就是为什么它挂在recv - 服务器根本无法响应这种类型的请求。

python flup软件包包含fcgi客户端。如果你想测试你的fcgi应用程序,你可以使用它。