Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # 標準ライブラリにモンキーパッチを当てる
  5. # ブロッキング I/O を使った操作が裏側で全てノンブロッキング I/O を使うように書き換えられる
  6. import eventlet
  7. eventlet.monkey_patch()
  8.  
  9.  
  10. def client_handler(clientsocket, client_address, client_port):
  11. """クライアントとの接続を処理するハンドラ"""
  12. while True:
  13. try:
  14. message = clientsocket.recv(1024)
  15. print('Recv: {0} from {1}:{2}'.format(message,
  16. client_address,
  17. client_port))
  18. except OSError:
  19. break
  20.  
  21. if len(message) == 0:
  22. break
  23.  
  24. sent_message = message
  25. while True:
  26. sent_len = clientsocket.send(sent_message)
  27. if sent_len == len(sent_message):
  28. break
  29. sent_message = sent_message[sent_len:]
  30. print('Send: {0} to {1}:{2}'.format(message,
  31. client_address,
  32. client_port))
  33.  
  34. clientsocket.close()
  35. print('Bye-Bye: {0}:{1}'.format(client_address, client_port))
  36.  
  37.  
  38. def main():
  39. host = 'localhost'
  40. port = 37564
  41.  
  42. # Eventlet 経由でサーバソケットを用意する
  43. serversocket = eventlet.listen((host, port))
  44. # グリーンスレッドのプールを用意する
  45. pool = eventlet.GreenPool()
  46.  
  47. while True:
  48. # クライアントからの接続を待ち受ける
  49. clientsocket, (client_address, client_port) = serversocket.accept()
  50. # 接続がきたらプールのグリーンスレッドで処理する
  51. pool.spawn_n(client_handler, clientsocket, client_address, client_port)
  52.  
  53.  
  54. if __name__ == '__main__':
  55. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement