python连接websocket

Zss 发表于:

pip install websocket

pip install websocket_client

某些对于实时性要求高的web使用的不是再试ajax轮询的方式来刷新数据,使用的是websocket,区别是

以往的ajax使用的轮询的方式,浏览器循环的定时向服务器请求数据,服务器返回数据,若请求的时间间隔非常小实时性会越高,但是对于服务器的开销非常大

而websocket的方式服务器可以主动推送数据给客户端,连接只需要建立一次,保持一个持久型连接的状态,只要在这个连接状态中,服务器都可以主动推送数据到客户端,省去了

客户端每次想服务器请求

服务器的开销更小,数据的实时性更高

 

websocket简而言之的web中的socket,普通的客户端和服务端socket也是建立在tcp的三次握手中传输数据,只是将其嵌入在了web中,以往的web都是请求应答的形式,而websocket是建立连接收发数据,http的方式虽然也是建立在tcp上,但是应用层http的机制就是定义的一问一答的方式

 

这些websocket用于web的聊天室,股票等数据实时性高的网站多

 

爬取莱特币网站的实时数据

使用两个线程,一收一发,全双工的方式

#coding:utf-8
import time,json
from websocket import create_connection
from threading import Thread

url = 'wss://api.bbxapp.vip/v1/ifcontract/realTime'
ws = create_connection(url)

def recv_data():
    while True:
        try:
            data = ws.recv()
            print('接收'+data+'\n')

        except Exception as e:
            print('连接异常:', e)
            time.sleep(3)
            continue

def send_data():
    info = json.dumps({"action":"subscribe","args":["QuoteBin5m:14"]})
    ws.send(info)
    while 1:
        try:
            info = json.dumps({"action": "ping"})
            ws.send(info)
            time.sleep(30)
        except Exception as e:
            print('连接异常:', e)
            time.sleep(3)
            continue

T_list = []

T1 = Thread(target=recv_data)
T2 = Thread(target=send_data)
T1.start()
T2.start()
T1.join()
T2.join()

可以看到获取的数据和网页中一致

看到数据使用的是json的数据格式,有的返回的就是普通的字符型,或者返回一个html标签信息,返回的数据会直接嵌入在html中