如何使用Websocket订阅实时股票价格

embedded/2024/10/21 5:17:38/

WebSocket和HTTP请求在工作原理和使用场景上存在显著区别。首先,HTTP是一种无状态的协议,客户端发起请求,服务器响应后,连接通常会关闭。如果客户端需要再次获取数据,必须发起新的请求。这种"请求-响应"模型适用于大多数网络应用,如网页浏览和API交互,但不适合需要实时、持续通信的场景。

WebSocket则是一种全双工通信协议,它允许客户端和服务器在建立初始连接后,保持连接持续打开。通过这个连接,双方可以随时发送数据,而无需客户端不断发起新请求。这使WebSocket成为处理实时数据的理想选择,如股票价格、聊天应用、游戏服务器等。在WebSocket连接建立后,数据的传输效率更高,因为它不需要每次通信都包含完整的HTTP头部信息。

WebSocket在订阅实时股价时具有显著优势。传统的HTTP请求通常依赖于轮询(polling)机制,即客户端定期向服务器发送请求以获取最新数据,这不仅增加了网络负载,还引入了延迟,无法实现真正的实时更新。而WebSocket则通过建立持续的全双工连接,使服务器能够在有新的股价数据时立即推送给客户端,无需轮询。这种方式极大地减少了延迟,确保用户能够实时获取股价波动。

此外,WebSocket的效率更高。与HTTP相比,WebSocket在初次连接后不会在每次通信时重新发送冗长的请求头信息,数据传输更加轻量化,节省了带宽。在需要处理高频率、大量数据的金融交易平台和量化交易中,WebSocket能够支持实时、高效的市场数据传输,让交易系统快速响应市场变化,从而为投资者提供更精确的决策支持。

因此,使用WebSocket订阅实时股价不仅降低了延迟,还优化了网络资源的使用,为高频率交易和数据密集型应用提供了理想的解决方案。

通过Websocket订阅股票价格的方法

python">import json
import websocket    # pip install websocket-client'''
# 特别注意:
# github: https://github.com/alltick/free-quote
# token申请:https://alltick.co
# 把下面url中的testtoken替换为您自己的token
# 外汇,数字币,贵金属的api址:
# wss://quote.tradeswitcher.com/quote-b-ws-api
# 港美股api地址:
# wss://quote.tradeswitcher.com/quote-stock-b-ws-api
'''class Feed(object):def __init__(self):self.url = 'wss://quote.tradeswitcher.com/quote-stock-b-ws-api?token=testtoken'  # 这里输入websocket的urlself.ws = Nonedef on_open(self, ws):"""Callback object which is called at opening websocket.1 argument:@ ws: the WebSocketApp object"""print('A new WebSocketApp is opened!')# 开始订阅(举个例子)sub_param = {"cmd_id": 22002, "seq_id": 123,"trace":"3baaa938-f92c-4a74-a228-fd49d5e2f8bc-1678419657806","data":{"symbol_list":[{"code": "700.HK","depth_level": 5,},{"code": "UNH.US","depth_level": 5,}]}}#如果希望长时间运行,除了需要发送订阅之外,还需要修改代码,定时发送心跳,避免连接断开,具体查看接口文档sub_str = json.dumps(sub_param)ws.send(sub_str)print("depth quote are subscribed!")def on_data(self, ws, string, type, continue_flag):"""4 argument.The 1st argument is this class object.The 2nd argument is utf-8 string which we get from the server.The 3rd argument is data type. ABNF.OPCODE_TEXT or ABNF.OPCODE_BINARY will be came.The 4th argument is continue flag. If 0, the data continue"""def on_message(self, ws, message):"""Callback object which is called when received data.2 arguments:@ ws: the WebSocketApp object@ message: utf-8 data received from the server"""# 对收到的message进行解析result = eval(message)print(result)def on_error(self, ws, error):"""Callback object which is called when got an error.2 arguments:@ ws: the WebSocketApp object@ error: exception object"""print(error)def on_close(self, ws, close_status_code, close_msg):"""Callback object which is called when the connection is closed.2 arguments:@ ws: the WebSocketApp object@ close_status_code@ close_msg"""print('The connection is closed!')def start(self):self.ws = websocket.WebSocketApp(self.url,on_open=self.on_open,on_message=self.on_message,on_data=self.on_data,on_error=self.on_error,on_close=self.on_close,)self.ws.run_forever()if __name__ == "__main__":feed = Feed()feed.start()

解析推送数据

python">{"cmd_id":22998,"data":{"code": "1288.HK","seq": "1605509068000001","tick_time": "1605509068","price": "651.12","volume": "300","turnover": "12345.6","trade_direction": 1,}
}

5档行情数据

python">{"cmd_id":22999,"data":{"code": "1288.HK","seq": "1605509068000001","tick_time": "1605509068","bids": [{"pric": "9.12","volume": "9.12",},{"pric": "9.12","volume": "9.12",},{"pric": "9.12","volume": "9.12",},{"pric": "9.12","volume": "9.12",},{"pric": "9.12","volume": "9.12",}],"asks": [{"price": "147.12","volume": "147.12",},{"price": "147.12","volume": "147.12",},{"price": "147.12","volume": "147.12",},{"price": "147.12","volume": "147.12",},{"price": "147.12","volume": "147.12",}],}
}


http://www.ppmy.cn/embedded/129182.html

相关文章

简单实现通过电脑操作手机

通过电脑操作手机,支持单击,拖抓事件,延时有1-2秒。 具体步骤: 1、从手机截图到sdcard 2、将图片导出到PC 3、从PC加载展示图片 4、开启定时器 5、设置点击、滚动事件 1、 private static void takeScreenshot(String path)…

Kafka异常重试方案小记

背景 在最近进行的项目架构升级中,我们对原有的核心项目结构进行了细致的拆分。 现在,核心项目与非核心项目之间的通信和数据交换主要通过Kafka这一中间件来实现。 这种设计主要体现在核心项目向非核心项目发送通知,这些通知大致可以分为三个…

【Linux】并行与并发(含时间片)

简单来说 并发:多个进程轮流使用同一个CPU,在逻辑层面上,一段时间内推进完成了多个进程 并行:机器中有多个CPU可以使用,在物理层面上,做到同一时间会有多个进程同时在运行 举个例子:一群人需要…

基于SSM+微信小程序的宠物管理系统1

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的宠物管理系统实现了管理员、店主、用户。 管理员实现了店主管理、附件宠物店、管理员、用户管理、猫狗查询、猫狗宠物社区、商品信息等、店主实现了商品信息管理。用户…

Windows PowerShell 有没有类似conda的虚拟环境功能?

PowerShell本身并不直接提供与Conda完全相同的环境功能,但PowerShell可以通过一些方法和工具来实现类似的环境管理。以下是对PowerShell和Conda环境功能的详细对比及PowerShell实现类似功能的途径: 一、Conda的环境功能 Conda是一个开源的包管理系统和…

OpenAI研究揭示ChatGPT的性别和种族偏见

🦉 AI新闻 🚀 OpenAI研究揭示ChatGPT的性别和种族偏见 摘要:OpenAI发布了一项新研究,指出ChatGPT在回应用户时,可能会根据姓名推断性别和种族特征,从而反映训练数据中的社会偏见。例如,女性名…

基于Docker安装Grafana及其基本功能

Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。 拉取Grafana镜像 docker pull grafana/grafana 运行镜像 docker run -d -p 3000:3000 --namegrafana grafana/grafana 打开浏览器,访问 http://l…

css3新增都知识点

1.新的选择器 属性选择器、伪类选择器、伪元素选择器 2.圆角与阴影 border-radius(圆角)、box-shadow(阴影) 3.渐变 线性渐变(linear-gradient) 径向渐变(radial-gradient) 4…