2016-08-02 71 views
0

我有一個Tornado服務器,它偵聽地址/端口和套接字。我粗略地創建像這樣(剝離下來,重重地)服務器:確定請求是否通過套接字或URL與Tornado進行通訊

from tornado import httpserver 
from tornado.netutil import bind_unix_socket 

server = httpserver.HTTPserver(
    request_callback=some_callback, 
    io_loop=some_loop, 
) 
unix_socket = bind_unix_socket("mysock.sock") 
server.add_socket(unix_socket) 
server.listen(address="some_host", port=1234) 

我希望能夠區分在通過套接字接收到一個請求,即是這樣的:

curl -XGET --unix-socket mysock.sock http:/ping 

由於反對:

curl http://some_address:1234/ping 

我看着接收到一個請求時龍捲風使用HTTPServerRequest,但我不知道最好的辦法是告訴兩者之間的區別是什麼。我可以看看remote_ip以查看它是否來自本地主機,但我不認爲這是理想的。

回答

1

localhost是一個具有衆所周知的IP地址的互聯網域接口。它與不具有IP地址的unix域套接字不同。

對源代碼的簡要介紹表明,remote_ip屬性將包含'0.0.0.0',用於在unix套接字上接收的連接。

(該remote_ip大概也是'127.0.0.1'用於經由本地主機連接接收一個連接。)

+0

看起來'remote_ip'將'0.0.0.0'對於Unix套接字按照'tornado.httpserver.py'在來源(https://github.com/tornadoweb/tornado/blob/81ee310adcd905fbdf7c98d9fb6ef0c5a46026c2/tornado/httpserver.py#L203)。另外,我相信'request.context'中的'address_family'將會是'AF_UNIX'。 – thomascirca

相關問題