2016-04-27 75 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應用程序,你可以使用它。