websocket
testnet wss://testnet-chain-messages.functionx.io
心跳60秒,累计大于等于3次未收到心跳服务器关闭客户端连接
{
"type": "subscribe", // subscribe or unsubscribe
"topic": "proposal:fxcore", // fxcore
"lastId": "7335908" // 从那个快开始补数据(注意只缓存了5分钟)
}
import time
import websocket
import json
import ssl
import os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"
class WebSocketClient:
def __init__(self, url, subscribe_data, on_message):
self.url = url
self.subscribe_data = subscribe_data
self.error = None
self.close_status = None
self.message = on_message
def on_error(self, ws, error):
self.error = error
def on_close(self, ws, close_status, ):
self.close_status = close_status
def on_open(self, ws):
ws.send(json.dumps(self.subscribe_data))
def on_message(self, ws, message):
self.message = message
def websocket(self, ws):
lists = []
while (1):
try:
ws = websocket.create_connection(self.url, sslopt={"cert_reqs": ssl.CERT_NONE},
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close)
# 消息头
ws.send(json.dumps(self.subscribe_data))
# 发送消息头 消息头发送一次即可 。server会在数据有变化情况下主动返回
while (1):
message = ws.recv()
result = json.loads(message)
print("result:%s" % result)
print("------------------------------------------")
if 'data' in result:
if self.message + 1 == result['data']['height']:
# print('ss',result)
lists.append(message)
# ws.close()
except Exception as e:
print(e)
break
return lists
import json
from testcase.websocket.websocket_app import WebSocketClient
def subscribe_data(lastId):
# 测试subscribe_data中3个字段正常传值的情况
url = "wss://testnet-chain-messages.functionx.io"
subscribe_data = {
"type": "subscribe",
"topic": "proposal:fxcore",
"lastId": str(lastId)
}
print(subscribe_data)
# 创建WebSocketClient实例
client = WebSocketClient(url, subscribe_data, on_message=lastId)
message = client.websocket(ws=client)
return message
s = subscribe_data(9170501-1)
data = json.loads(s)
print("data:",data)