2017-09-17 1 views
0

私はソースコードを竜巻読んだとき、私はすべてのsocketは時間を受け入れるので、私はこのようなaccept_handlerにログを追加記録したい:竜巻ソケットの受け入れ時間を記録するには?

def accept_handler(fd, events): 
    for i in xrange(_DEFAULT_BACKLOG): 
     if removed[0]: 
      # The socket was probably closed 
      return 
     try: 
      connection, address = sock.accept() 
     except socket.error as e: 
      # _ERRNO_WOULDBLOCK indicate we have accepted every 
      # connection that is available. 
      if errno_from_exception(e) in _ERRNO_WOULDBLOCK: 
       return 
      # ECONNABORTED indicates that there was a connection 
      # but it was closed while still in the accept queue. 
      # (observed on FreeBSD). 
      if errno_from_exception(e) == errno.ECONNABORTED: 
       continue 
      raise 
     set_close_exec(connection.fileno()) 
     gen_log.warning('accept at {}'.format(io_loop.time())) 
     callback(connection, address) 

私のハンドラは、ブロッキング機能で、それブロックioloop 3Sとリターン「ハロー世界'。

[W 170916 22:06:01 netutil:278] accept at 1505624761.04 
sleep at 1505624761.04 
wake at 1505624764.04 
[I 170916 22:06:04 web:2063] 200 GET/(192.168.10.243) 3005.47ms 
[W 170916 22:06:04 netutil:278] accept at 1505624764.04 
sleep at 1505624764.04 
wake at 1505624767.05 
[I 170916 22:06:07 web:2063] 200 GET/(192.168.10.243) 3005.02ms 
[W 170916 22:06:07 netutil:278] accept at 1505624767.05 
sleep at 1505624767.05 
wake at 1505624770.05 
[I 170916 22:11:06 web:2063] 200 GET/(192.168.10.243) 3003.87ms 
[W 170916 22:11:06 netutil:278] accept at 1505625066.86 
sleep at 1505625066.86 
wake at 1505625069.86 
[I 170916 22:11:09 web:2063] 200 GET/(192.168.10.243) 3002.22ms 
[W 170916 22:11:09 netutil:278] accept at 1505625069.86 
sleep at 1505625069.86 
wake at 1505625072.87 
[I 170916 22:11:12 web:2063] 200 GET/(192.168.10.243) 3004.91ms 
[W 170916 22:11:12 netutil:278] accept at 1505625072.87 
sleep at 1505625072.87 
wake at 1505625075.87 
[I 170916 22:11:15 web:2063] 200 GET/(192.168.10.243) 3004.71ms 
[W 170916 22:11:15 netutil:278] accept at 1505625075.87 
sleep at 1505625075.87 
wake at 1505625078.88 
[I 170916 22:11:18 web:2063] 200 GET/(192.168.10.243) 3006.12ms 
[W 170916 22:11:18 netutil:278] accept at 1505625078.88 
sleep at 1505625078.88 
wake at 1505625081.89 
[I 170916 22:11:21 web:2063] 200 GET/(192.168.10.243) 3006.07ms 
[W 170916 22:11:21 netutil:278] accept at 1505625081.89 
sleep at 1505625081.89 
wake at 1505625084.89 
[I 170916 22:11:24 web:2063] 200 GET/(192.168.10.243) 3005.07ms 
[W 170916 22:11:24 netutil:278] accept at 1505625084.9 
sleep at 1505625084.9 
wake at 1505625087.9 
[I 170916 22:11:27 web:2063] 200 GET/(192.168.10.243) 3006.34ms 

トルネードプロセスを1つずつ要求のように見えるが、私はそれが真実ではないと思うと、私はすべて見つけwiresharkを使用します。

その後、私はスレッドを経由して同時に10件のリクエストを送って、私は竜巻のログは、このようなものです発見しました接続は非常に短い時間で受け入れられているので、私はすべてのsocketは時間を受け入れ、表示するログを追加する方法がわかりません。

答えて

0

。つまり、この場合には、accept()次の呼び出し(受け入れループの終わりにcallback()への呼び出しは、最終的にハンドラに到達します)が含まれています。トルネードのいずれかの並行性を持つために「あなたが他のスレッドに作業を移動するためにThreadPoolExecutorを使用することができます。IOLoopスレッド上で(非ブロックすべてのハンドラを作成する必要があり、それらのスレッドでは、あなたが好きなだけをブロックすることができますが、次のことができます他のトルネードメソッドを呼び出す)。

0

私はこの質問をする理由の理由はsocketの私の誤解に由来していると思います。サーバーsock.acceptと呼ばれ、接続がESTABLISHEDの状態になった後、私はtornadoソースコードを読む

は、私はそれでも私は、ioloopを起動していないクライアントがサーバーに接続することができ、これらのソケットは到達しない限り、確立することができ、真実ではない、と思いましたデフォルト聴解backlog(128)。トルネード、ブロッキングハンドラブロックすべて

関連する問題