2016-08-02 7 views
0

私はアドレス/ポートとソケットの両方で待機するTornadoサーバーを持っています。私は(頻繁にストリップダウン)おおよそのようにサーバーを作成します。リクエストがソケットまたはURL経由でTornadoで受信されたかどうかを調べる

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

として:要求はつまり何かのように、ソケットを介して受信されたとき、私は区別できるようにしたいと思い

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 http://some_address:1234/ping 

私は要求を受信したときの竜巻が使用するHTTPServerRequestを見て、私は最善の方法は、2つの違いを教えているのかわからないんだけど。私はremote_ipを見て、それがlocalhostから来ているかどうかを見ることができますが、それは理想的だとは思いません。

答えて

1

localhostは、よく知られているIPアドレスを持つインターネットドメインインターフェイスです。 IPアドレスを持たないUnixドメインソケットと同じではありません。

ソースを簡単に見てみると、remote_ip属性には、UNIXソケットで受信した接続の場合、'0.0.0.0'が含まれることが示唆されています。

は(remote_ipは、おそらくローカルホスト接続を介して受信された接続用'127.0.0.1'であろう。)

+0

remote_ip'がでtornado.httpserver.py' 'に従ってUNIXソケットの' 0.0.0.0'あろう 'のように見えますソース(https://github.com/tornadoweb/tornado/blob/81ee310adcd905fbdf7c98d9fb6ef0c5a46026c2/tornado/httpserver.py#L203)。さらに、 'request.context'の' address_family'は 'AF_UNIX'と考えています。 – thomascirca

関連する問題