我有一个Python wsgi应用程序,由NGIx后面的uWSGI提供服务。 NGinx侦听网络并将请求转发到位于/tmp/uwsgi.socket
的uWSGI unix套接字。
现在,我试图模仿我在与这个套接字交谈时推测NGinx所做的事情。我使用Python尝试了以下内容:
import socket
uwsgi_socket_address = "/tmp/uwsgi.sock"
socket_client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
socket_client.connect(uwsgi_socket_address)
msg = "GET /index HTTP/1.1\r\n"
socket_client.sendall(msg)
我收到此错误
/usr/lib/python2.7/socket.pyc in meth(name, self, *args)
222
223 def meth(name,self,*args):
--> 224 return getattr(self._sock,name)(*args)
225
226 for _m in _socketmethods:
error: [Errno 32] Broken pipe
1)我正在尝试使用该套接字和uWSGI吗?如果是这样的话还有什么可以让它发挥作用?
2)是否有一个python实用程序可以帮助我制作文本http请求,而不仅仅是代表我自己查询服务器?像这样:
>>> import somehttplib
>>> http = somehttplib()
>>> request = http.get('/index')
>>> request.text=='GET /index HTTP/1.1\r\n'
True
答案 0 :(得分:3)
您不能将HTTP与服务器谈论' uwsgi'协议。 uwsgi协议是一种用于数组和字典的简单二进制序列化格式。如果您想与uWSGI服务器说HTTP,您必须将其配置为使用--http-socket而不是--socket来说HTTP。
您可以将两者放在同一个实例中:
uwsgi --http-socket <address1> --socket <address2> ...
最终,您可以轻松实现几行的uwsgi序列化程序。
这是一个解析器的例子(显然你需要相反的):
https://github.com/unbit/blastbeat#uwsgi
在这里您可以找到规格:
答案 1 :(得分:1)
查看uwsgi-tools
包。它使用IP套接字,但是通过一些小的更改,您也可以将它应用于unix套接字。