Anders and Briegel in Python
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

73 行
2.2KB

  1. '''
  2. The MIT License (MIT)
  3. Copyright (c) 2013 Dave P.
  4. '''
  5. import signal
  6. import sys
  7. import ssl
  8. from SimpleWebSocketServer import WebSocket, SimpleWebSocketServer, SimpleSSLWebSocketServer
  9. from optparse import OptionParser
  10. class SimpleEcho(WebSocket):
  11. def handleMessage(self):
  12. print self.data
  13. self.sendMessage(self.data)
  14. def handleConnected(self):
  15. pass
  16. def handleClose(self):
  17. pass
  18. clients = []
  19. class SimpleChat(WebSocket):
  20. def handleMessage(self):
  21. for client in clients:
  22. if client != self:
  23. client.sendMessage(self.address[0] + u' - ' + self.data)
  24. def handleConnected(self):
  25. print (self.address, 'connected')
  26. for client in clients:
  27. client.sendMessage(self.address[0] + u' - connected')
  28. clients.append(self)
  29. def handleClose(self):
  30. clients.remove(self)
  31. print (self.address, 'closed')
  32. for client in clients:
  33. client.sendMessage(self.address[0] + u' - disconnected')
  34. if __name__ == "__main__":
  35. parser = OptionParser(usage="usage: %prog [options]", version="%prog 1.0")
  36. parser.add_option("--host", default='', type='string', action="store", dest="host", help="hostname (localhost)")
  37. parser.add_option("--port", default=8000, type='int', action="store", dest="port", help="port (8000)")
  38. parser.add_option("--example", default='echo', type='string', action="store", dest="example", help="echo, chat")
  39. parser.add_option("--ssl", default=0, type='int', action="store", dest="ssl", help="ssl (1: on, 0: off (default))")
  40. parser.add_option("--cert", default='./cert.pem', type='string', action="store", dest="cert", help="cert (./cert.pem)")
  41. parser.add_option("--ver", default=ssl.PROTOCOL_TLSv1, type=int, action="store", dest="ver", help="ssl version")
  42. (options, args) = parser.parse_args()
  43. cls = SimpleEcho
  44. if options.example == 'chat':
  45. cls = SimpleChat
  46. if options.ssl == 1:
  47. server = SimpleSSLWebSocketServer(options.host, options.port, cls, options.cert, options.cert, version=options.ver)
  48. else:
  49. server = SimpleWebSocketServer(options.host, options.port, cls)
  50. def close_sig_handler(signal, frame):
  51. server.close()
  52. sys.exit()
  53. signal.signal(signal.SIGINT, close_sig_handler)
  54. server.serveforever()