1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
# -*- coding: utf-8 -*-
__doc__ = """
A simple chat example using a CherryPy webserver.
$ pip install cherrypy
Then run it as follow:
$ python app.py
You will want to edit this file to change the
ws_addr variable used by the websocket object to connect
to your endpoint. Probably using the actual IP
address of your machine.
"""
import random
import os
import cherrypy
from ws4py.server.cherrypyserver import WebSocketPlugin, WebSocketTool
from ws4py.websocket import WebSocket
from ws4py.messaging import TextMessage
cur_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
index_path = os.path.join(cur_dir, 'index.html')
index_page = file(index_path, 'r').read()
class ChatWebSocketHandler(WebSocket):
def received_message(self, m):
cherrypy.engine.publish('websocket-broadcast', m)
def closed(self, code, reason="A client left the room without a proper explanation."):
cherrypy.engine.publish('websocket-broadcast', TextMessage(reason))
class ChatWebApp(object):
@cherrypy.expose
def index(self):
return index_page % {'username': "User%d" % random.randint(50, 1000),
'ws_addr': 'ws://localhost:9000/ws'}
@cherrypy.expose
def ws(self):
cherrypy.log("Handler created: %s" % repr(cherrypy.request.ws_handler))
if __name__ == '__main__':
cherrypy.config.update({
'server.socket_host': '0.0.0.0',
'server.socket_port': 9000
})
WebSocketPlugin(cherrypy.engine).subscribe()
cherrypy.tools.websocket = WebSocketTool()
cherrypy.quickstart(ChatWebApp(), '',
config={
'/': {
'tools.response_headers.on': True,
'tools.response_headers.headers': [
('X-Frame-options', 'deny'),
('X-XSS-Protection', '1; mode=block'),
('X-Content-Type-Options', 'nosniff')
]
},
'/ws': {
'tools.websocket.on': True,
'tools.websocket.handler_cls': ChatWebSocketHandler
},
})
|