Ich habe einen Tornado-Server, der sowohl auf eine Adresse/einen Port als auch auf einen Socket hört. Ich schaffe den Server grob wie so (abgespeckte stark):Ermitteln, ob eine Anfrage über Socket oder URL mit Tornado kam
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)
Ich mag würde der Lage sein, zu unterscheiden, wenn eine Anfrage über die Buchse empfangen wird, also so etwas wie:
curl -XGET --unix-socket mysock.sock http:/ping
Wie im Gegensatz zu:
curl http://some_address:1234/ping
ich am HTTPServerRequest sah, dass Tornado verwendet, wenn eine Anfrage empfangen wird, aber ich bin mir nicht sicher, was der beste Weg, um den Unterschied zwischen den beiden zu sagen ist. Ich kann remote_ip
betrachten, um zu sehen, ob es von localhost kommt, aber ich denke nicht, dass das ideal ist.
Sieht aus wie 'remote_ip' wird' 0.0.0.0' für einen Unix-Socket als pro 'tornado.httpserver.py' in die Quelle (https://github.com/tornadoweb/tornado/blob/81ee310adcd905fbdf7c98d9fb6ef0c5a46026c2/tornado/httpserver.py#L203). Außerdem glaube ich, dass die 'address_family' im' request.context' 'AF_UNIX' ist. – thomascirca