websocket是非常好用的,可以解决很多web页面看似解决不了的问题,让web与app客户端更加相似
想要使用tornado上的websocket接口,需要搭建基础的tornado应用,
tornado十分好部署(下载地址)
$ wget https://github.com/downloads/facebook/tornado/tornado-2.4.1.tar.gz
几个命令安装就好了
$ tar -z -xv -f tornado-2.4.1.tar.gz $ cd tornado-2.4.1 $ python3 setup.py build $ sudo python3 setup.py install
安装好后会在目录下找到一个tornado的目录 进去找到demo文件夹中hello这个项目,这是个测试项目然后执行 $ python3 hello.py
如果没有报错则安装成功,hello项目下template文件夹是html文件的目录
tornado的使用不在这里多做赘述,我们来看一下tornado继承的websocket类(websocket.WebSocketHandler)
继承了这个类以后需要重写这个类下面的三个函数
def open(self): 链接成功时触发 def on_message(self, message):发送数据时触发 def on_close(self):链接端关闭时触发
html的链接方式
var ws=new websocket("wss://........")
链接成功以后上面的三个函数分别对应,html的三个函数
ws.onpen=function(event){}
ws.onmessage=functing(event){}
ws.onclose=function(event){}
这样就好解释了,当你连接成功后,
html用ws.send()函数来发送数据
发送成功后触发open函数,open触发html的open,on_message触发ws.onmessage,on_close触发ws.onclose
python实例:
class Sendshow_simulation(websocket.WebSocketHandler): def check_origin(self,origin): '''跨域修正''' return True
def open(self,uid): '''open''' self.write_message("open successful") pass
def on_message(self, message): '''on_message''' self.write_message("ok") def on_close(self): '''on_close''' pass
如此这般,就可以和html前台交互数据了
当然,还有很多,比如分用户推送,聊天室之类的功能,都跟普通socket功能差不多
当你要用tornado做服务器的时候,就涉及到跨域,和部署websocket服务器的问题
location /websock/ { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://192.168.0.86:8000; }
在nginx中部署wss的websocket方法,不同情况传不同参数