<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="javascript:WebSocketTest()">Run WebSocker</a> <div id="messages"> </div> </body> <script> var messageContainer=document.getElementById("messages"); function WebSocketTest() { if ("WebSocket" in window){ messageContainer.innerHTML='Web Socket is supported by your browser'; var ws=new WebSocket("ws://localhost:8888/websocket?id=1"); ws.onopen=function () { ws.send("Message To Send"); }; ws.onmessage=function (p1) { var receivemasg=p1.data; messageContainer.innerHTML=messageContainer.innerHTML+"<br>Message is received :"+receivemasg; }; ws.onclose=function (p1) { messageContainer.innerHTML=messageContainer.innerHTML+"<br>Connection is closed .. :"+receivemasg; } }else{ messageContainer.innerHTML="您的电脑不支持webSocker"; } } </script>
</html>
#coding:utf-8 import tornado from tornado.ioloop import IOLoop import tornado.websocket import tornado.web from tornado.options import define,options,parse_command_line define("port",default=8888,help="run on the given port",type=int) clients=dict() class IndexHandler(tornado.web.RequestHandler): @tornado.web.asynchronous def get(self, *args, **kwargs): self.render("../templates/index.html") class MyWebSocketHandler(tornado.websocket.WebSocketHandler): def open(self, *args, **kwargs): self.id=self.get_argument("id") self.stream.set_nodelay(True) clients[self.id]={"id":self.id,"object":self} def on_message(self, message): print("Client %s received a message %s "%(self.id,message)) def on_close(self): if self.id in clients: del clients[self.id] print("Client %s is closed "%self.id) def check_origin(self, origin): return True app=tornado.web.Application(handlers=[ (r"/",IndexHandler), (r"/websocket",MyWebSocketHandler) ],static_path="templates") import threading import time def sendTime(): import datetime while True: for key in clients.keys(): msg=str(datetime.datetime.now()) clients[key]["object"].write_message(msg) print("write to client %s :%s"%(key,msg)) time.sleep(1) if __name__ == '__main__': threading.Thread(target=sendTime).start() parse_command_line() app.listen(options.port) IOLoop.instance().start()