阿里云主机安装wordpress/淘宝seo搜索排名优化
最近在网上找了些websocket的资料看了下,node和tornado等等本身已经实现了websocket的封装,所以使用起来会比较简单,php如果想要写websocket还需要自己跑一整套流程,比较麻烦。
根据网上的资料写了一个简单的websocket的demo,果真炫酷掉渣天,我是用tornado,网上多是实现实时聊天室的例子,想要实现点对点的聊天功能还需要在send函数那里加条件,目测是根据浏览器用户的id去判断的。代码如下:
服务端代码:
#!/usr/bin/python
#coding:utf-8
import os.pathimport tornado.httpserver
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpclient
import tornado.websocketimport json
class IndexHandler(tornado.web.RequestHandler):def get(self):self.render("index.html")class SocketHandler(tornado.websocket.WebSocketHandler):"""docstring for SocketHandler"""clients = set()@staticmethoddef send_to_all(message):for c in SocketHandler.clients:c.write_message(json.dumps(message))def open(self):self.write_message(json.dumps({'type': 'sys','message': 'Welcome to WebSocket',}))SocketHandler.send_to_all({'type': 'sys','message': str(id(self)) + ' has joined',})SocketHandler.clients.add(self)def on_close(self):SocketHandler.clients.remove(self)SocketHandler.send_to_all({'type': 'sys','message': str(id(self)) + ' has left',})def on_message(self, message):SocketHandler.send_to_all({'type': 'user','id': id(self),'message': message,})##MAIN
if __name__ == '__main__':app = tornado.web.Application(handlers=[(r"/", IndexHandler),(r"/chat", SocketHandler)],debug = True,template_path = os.path.join(os.path.dirname(__file__), "templates"),static_path = os.path.join(os.path.dirname(__file__), "static"))app.listen(8000)tornado.ioloop.IOLoop.instance().start()
客户端代码:
<html>
<head>
<script type="text/javascript">
var ws = new WebSocket("ws://localhost:8000/chat");
ws.onmessage = function(event) {console.log(event);
}
function send() {ws.send(document.getElementById('chat').value );
}
</script>
</head><body><div>hello<input id="chat"><button οnclick="send()">send</button></div>
</body>
</html>