python的websocket的使⽤
⼀:websocket使⽤场景
adthedocs.io/en/latest/running.html
最典型的使⽤场景:聊天。
websocket和socket还有就是:当我们做异步处理的任务的时候,之前采⽤的长轮询或者计时器的⽅法,但是这种⽅法的开销和性能⽐较差。对于⽹页的性能的不是很好。
⽽html5的时候⽀持websocket和python 本⾝也⽀持websocket,由于websocket的特性和开销更⼩,性能更好。所以采⽤websocket⽅式。接下来的django中,会开发⼀个叫做channels。这种⽅式更为不错。
今天介绍websocket。⾄于websocket的好处,⽹上的介绍⼀⼤堆,可以⾃⼰百度看,不做累述。
⼆使⽤:
简单介绍下代码:前端通过jquery的$() 来采集页⾯的IP信息,然后通过html5的websocket跟后端python通信,后端通过传过的IP信息,建⽴ansible任务,执⾏对应的采集脚本,隔⼏秒返回给前端,
前端将结果替换到相应的页⾯,来更新前端的监控信息。
1、python 安装websocket:
1 pip2.7  install dwebsocket
前端代码:
1if (window.s) {
2                window.s.close()
3            }
4/*创建socket连接*/
5var socket = new WebSocket("ws://192.168.31.206:1601/get_monitor/");
6            pen = function () {
7                console.log('WebSocket open');//成功连接上Websocket
8                socket.send(msg)
9            };
10            ssage = function (e) {
11                data=JSON.parse(e.data);
12                console.log('message: ' + e.data);//打印出服务端返回过来的数据
13                $.each(data['success_ip'],
14                                  function(key,val){
15                                      $( 'td:contains('+key+')').siblings().find('.cpu_val').text(val[0]);
16                                      $( 'td:contains('+key+')').siblings().find('.io_val').text(val[2]+'m');
17                                      $( 'td:contains('+key+')').siblings().find('.disk_val').text(val[1]+'%');
18                                  }
19
20                )
21            };
22// Call onopen directly if socket is already open
23if (adyState == WebSocket.OPEN) pen();
24            window.s = socket;
25
26
27    }
后端代码:
1 @accept_websocket
2 def get_monitor(request):#get monior infomation func.
3    import time
4if  request.is_websocket():
5while True:
6if request.websocket.has_messages():
7                msg=ad()
8                ip,task_id=msg.split(':')
9                ip_list=[]
10                ip_list.append(ip)
11                print ip_list,task_id
12                host_obj=models.Host.objects.filter(task_id=task_id).first()
13                user=host_obj.sys_user
14                pwd=host_obj.sys_pwd
15while True:
16                    time.sleep(2)
17                    task_obj=task_excu.Task_Runner(ip_list, user, pwd)
18                    ret=_monitor()
19for i,v in ret['success_ip'].items():
20                        v=v.split('\n')
21                        ret['success_ip'][i]=v
22                        request.websocket.send(json.dumps(ret))
23else:
24                time.sleep(1)
25continue
注释:
通过装饰器:@accept_websocket来让view函数的即可以接受http协议也可以接收wss 协议及websocket。
通过while死循环来,不断等待接收前端发送的消息和发送消息。
通过time模块来控制循环速度。
前端通过websocket 给后端发送消息和接收消息。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。