4
A WebSocket server that echos back whatever it receives from the client.
5
Copyright 2010 Joel Martin
6
Licensed under LGPL version 3 (see docs/LICENSE.LGPL-3)
8
You can make a cert/key with openssl using:
9
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
10
as taken from http://docs.python.org/dev/library/ssl.html#certificates
13
import os, sys, select, optparse
14
sys.path.insert(0,os.path.dirname(__file__) + "/../")
15
from websocket import WebSocketServer
17
class WebSocketEcho(WebSocketServer):
19
WebSockets server that echos back whatever is received from the
25
Echo back whatever is received.
36
if cqueue or c_pend: wlist.append(self.client)
37
ins, outs, excepts = select.select(rlist, wlist, [], 1)
38
if excepts: raise Exception("Socket exception")
40
if self.client in outs:
41
# Send queued target data to the client
42
c_pend = self.send_frames(cqueue)
45
if self.client in ins:
46
# Receive client data, decode it, and send it back
47
frames, closed = self.recv_frames()
52
raise self.EClose(closed)
54
if __name__ == '__main__':
55
parser = optparse.OptionParser(usage="%prog [options] listen_port")
56
parser.add_option("--verbose", "-v", action="store_true",
57
help="verbose messages and per frame traffic")
58
parser.add_option("--cert", default="self.pem",
59
help="SSL certificate file")
60
parser.add_option("--key", default=None,
61
help="SSL key file (if separate from cert)")
62
parser.add_option("--ssl-only", action="store_true",
63
help="disallow non-encrypted connections")
64
(opts, args) = parser.parse_args()
67
if len(args) != 1: raise
68
opts.listen_port = int(args[0])
70
parser.error("Invalid arguments")
73
server = WebSocketEcho(**opts.__dict__)