写入uWSGI unix套接字

时间:2014-10-10 08:59:43

标签: python sockets http uwsgi

我有一个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 

2 个答案:

答案 0 :(得分:3)

您不能将HTTP与服务器谈论' uwsgi'协议。 uwsgi协议是一种用于数组和字典的简单二进制序列化格式。如果您想与uWSGI服务器说HTTP,您必须将其配置为使用--http-socket而不是--socket来说HTTP。

您可以将两者放在同一个实例中:

uwsgi --http-socket <address1> --socket <address2> ...

最终,您可以轻松实现几行的uwsgi序列化程序。

这是一个解析器的例子(显然你需要相反的):

https://github.com/unbit/blastbeat#uwsgi

在这里您可以找到规格:

http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html

答案 1 :(得分:1)

查看uwsgi-tools包。它使用IP套接字,但是通过一些小的更改,您也可以将它应用于unix套接字。