WebSocket和HTTP请求的区别

1. 连接方式

  • HTTP请求:基于“请求-响应”模式。每次通信都要重新建立连接,客户端发送请求后服务器返回响应,连接就断开了。这种模式通常适合不频繁更新的数据,如静态页面的加载。
  • WebSocket:支持长连接,连接一旦建立后,就可以在客户端和服务器之间保持一直在线的连接通道,允许双向实时通信。WebSocket通过HTTP协议建立初始连接,然后切换到WebSocket协议,使得数据可以在连接期间任意方向传输。

2. 数据传输效率

  • HTTP请求:每次请求都要经过完整的HTTP协议流程(请求头、响应头等),这带来了一定的开销。对于需要频繁请求的数据,效率会降低。
  • WebSocket:一旦连接建立后,无需再发送请求和响应头,大幅减少了传输数据的开销。因此,WebSocket更适合实时性要求高的数据传输场景,如股票行情、在线聊天和多人游戏等。

3. 适用场景

  • HTTP请求:适用于数据更新频率低、请求量不高的场景,比如网页加载、资源请求、表单提交等。
  • WebSocket:适用于需要实时更新数据的场景,比如实时消息、在线游戏、金融市场数据推送(如实时股票行情)等,能够提供更快、更实时的用户体验。

4. 通信方式

  • HTTP请求:只能由客户端发起请求,服务器被动返回。
  • WebSocket:支持双向通信,服务器可以主动向客户端推送数据,客户端也可以随时发送数据给服务器,适合实时互动的应用。

接入实时股票行情API该用HTTP还是WebSocket?

在接入实时股票行情API时,WebSocket通常是更好的选择,因为它支持实时双向通信,可以持续向客户端推送最新的行情数据,而不需要反复建立连接和发送请求。

首先,从实时性和效率的角度来看,WebSocket在建立连接后可以保持长连接状态,服务器能够在有新行情数据时立即推送给客户端,实现真正的实时更新。这对于股票行情数据至关重要,因为价格波动随时发生,需要快速、持续地更新。如果使用HTTP请求,由于HTTP是“请求-响应”模式,客户端就必须频繁地发送请求来轮询服务器状态。这样的方式不仅带来延迟,增加了数据更新的时间成本,还会给服务器带来额外负载,降低性能。

其次,WebSocket还在性能和资源消耗方面更具优势。建立连接后,WebSocket只传输必要的数据,避免了HTTP请求的头部信息和其他额外开销,数据传输效率更高,因此资源占用更少。而在HTTP请求中,频繁地发送和接收数据会产生较多的资源消耗,每次请求都需要重新建立连接,传输头部信息,效率相对较低。

最后,从适用场景来看,WebSocket更适合需要频繁更新的场景,例如股票行情、加密货币价格和期货数据等,能够将数据的变化第一时间传递给客户端。相比之下,HTTP请求则更适合更新频率较低或只需偶尔查询一次的场景,例如查看历史行情数据或查询某只股票的详细信息等。

综上所述,如果API的使用场景是实时股票行情推送,那么WebSocket是最佳选择,能够实现低延迟的实时数据传输。如果只需周期性或一次性获取行情数据,HTTP请求同样可以满足需求。

WebSocket订阅股票价格示例

下面以港股小米集团为例,通过AllTick提供的接口请求实时报价

import json
import websocket    # pip install websocket-client'''
ALLTICK API官网:https://alltick.co/
可查A股、港股、美股、外汇、期货、加密货币的实时+历史行情数据
'''class Feed(object):def __init__(self):self.url = 'wss://quote.tradeswitcher.com/quote-stock-b-ws-api?token=testtoken'  # Enter your websocket URL hereself.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!')# Start subscribingsub_param = {"cmd_id": 22002,"seq_id": 123,"trace": "3baaa938-f92c-4a74-a228-fd49d5e2f8bc-1678419657806","data": {"symbol_list": [{"code": "1810.HK","depth_level": 5,}]}}# If you want to run for a long time, you need to modify the code to send heartbeats periodically to avoid disconnection, please refer to the API documentation for detailssub_str = json.dumps(sub_param)ws.send(sub_str)print("Depth quote for 1810.HK is subscribed!")def on_data(self, ws, string, type, continue_flag):"""4 arguments.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"""# Parse the received messageresult = 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python是什么

Python在编程语言中的地位 特点使用看法 特点 优点: 语法语义简单,容易上手功能强大,应用广泛生态丰富,具有海量的成熟第三方库方便调用C/C编写的代码 缺点: 执行效率比较弱对多核并发程序不友好动态类型系统对大型项目不友好 使用 扬长避短 看法 我们要把Python当成一…

论文解析八: GAN:Generative Adversarial Nets(生成对抗网络)

目录 1.GAN:Generative Adversarial Nets(生成对抗网络)1、标题 作者2、摘要 Abstract3、导言 IntroductionGAN的介绍 4、相关工作 Related work5、模型 Adversarial nets总结 6.理论计算 Theoretical Results具体算法公式全局优化 Global O…

springdata同时集成mongodb和elasticsearch异常

错误 Invalid bean definition with name ‘bookEsRepository’ defined in com.db.repository.BookEsRepository defined in EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: 产生原因 【spring-boot-starter-data…

【32】C++流

目录 C流 读写文件:文件流 对文本文件流读写 写文本文件 读文本文件 对二进制文件流读写 写二进制文件 读二进制文件 对文件流按格式读写取数据 按指定格式写文件 按指定格式读文件 C流 IO: 向设备输入数据和输出数据 C的IO流 设备: 文件控制台特定的数…

21世纪20年代了, 居然遭遇扩容U盘!

扩容u盘前些年很泛滥, 所以也有针对扩容u盘的测试软件 h2testw h2testw的工作原理很简单, 就是往u盘里写文件,写满后再读取文件进行验证 如果没有h2test, 也可以往里面考大文件, 再拷贝出来, 不出错就表示…

Navicat导入Excel数据时数据被截断问题分析与解决方案

目录 前言1. 问题分析1.1 默认字段类型的影响1.2 MySQL诊断机制的限制 2. 解决方案2.1 修改字段长度2.2 修改Excel数据以影响推断2.3 检查导入工具的设置 3. 其他注意事项3.1 注册表的修改3.2 增加自增ID 4. 结语 前言 在数据库的日常操作中,将Excel数据导入MySQL是…

ubuntu常用文件操作

1. 查看文件和目录 列出目录内容: ls列出当前目录的文件和子目录。常用参数包括: ls -l:显示详细信息(权限、所有者、大小、时间等)。ls -a:显示隐藏文件(以 . 开头的文件)。ls -h&a…

SQL Server 当前日期及其未来三天的日期

当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示 1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示 WITH CurrentDate AS (SELECT GETDATE() AS 当前日期 ) -- 使用 CONVERT 函数 SELECTCONVERT(VARCHAR(10), 当前日期,…

Ubuntu22.04版本左右,扩充用户可使用内存

1 取得root权限后,输入命令 lsblk 查看所有磁盘和分区,找到想要替换用户可使用文件夹内存的磁盘和分区。若没有进行分区,并转为所需要的分区数据类型,先进行分区与格式化,过程自行查阅。 扩充替换过程,例如…

28.3 一致性哈希和推送数据的redirect流程

本节重点介绍 : 开启一致性哈希环变更监听处理 这个服务的节点变更了(节点宕机、扩容)就对哈希环进行重置 开启结果监听和watch服务编写pgw的http接收端 推送数据的redirect流程 一致性哈希和推送数据的redirect流程 开启一致性哈希环变更监听处理 位置 sd/rings.go当这个…

大语言模型数据处理方法(基于llama模型)

文章目录 前言一、基于huggingface的DataCollatorForSeq2Seq方法解读1、DataCollatorForSeq2Seq方法2、batch最长序列填充3、指定长度填充二、构建大语言模型数据加工模块1、数据读取2、数据加工1、数据格式2、预训练(pretrain)数据加工3、微调(sft)数据加工①、sft数据加工…

Springboot项目搭建的问题

1.第一次出现这个问题是在使用postgresql进行搭建项目的时候,但是配置文件中的驱动一致导入不了 最后发现是meaven中依赖导入不进来(不知道为什么),于是手动的在meaven中央仓库下载了对应的jar进行配置 然后项目可以正常启动 2.…

大模型系列——AlphaZero/强化学习/MCTS

AlphaGo Zero无需任何人类历史棋谱,仅使用深度强化学习,从零开始训练三天的成就已远远超过了人类数千年积累的围棋知识。 1、围棋知识 (1)如何简单理解围棋知识 (2)数子法分胜负:https://zhu…

w外链如何跳转微信小程序

要创建外链跳转微信小程序,主要有以下几种方法: 使用第三方工具生成跳转链接: 注册并登录第三方外链平台:例如 “W外链” 等工具。前往该平台的官方网站,使用手机号、邮箱等方式进行注册并登录账号。选择创建小程序外…

Jellycat玩偶界的天花板,如何用情绪营销征服成年人的心?

Jellycat的用户肯定对这个品牌有一定的了解,不知道的用户或许也看过这个很火的茄子表情包,这是Jellycat很火的一款玩偶“活泼茄子”。Jellycat,这个源自英国伦敦的高端玩具品牌,近年来在全球范围内迅速走红,摇身一变玩…

一方数据能让沃尔玛广告业务成为下一个亚马逊吗?

作者:刀客doc 在如今的广告市场可以说是热闹非凡。有Facebook、谷歌这些传统巨头,也有亚马逊、TikTok这些行业新贵涌现出来。近几年连PayPal、Netflix这些原来和广告业务八竿子打不着的平台,也都开始把勺子伸进来,想要分一杯羹。…

基于SSM土家风景文化管理系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,景点分类管理,热门景点管理,门票订单管理,旅游线路管理,系统管理 前提账号功能包括:系统首页,个人中心&…

windows 编译 breadpad

原文链接:https://gist.githubusercontent.com/vnl/f317840bfa9c638a60f2c4110872056a/raw/07185c8e86fc2faf08e3410ed3950a5c4d2e8b32/Breakpad%2520on%2520Windows ##### Building Google breakpadBuilding Google breakpad on Windows is a very painful experience because…

搭建海外云服务器需要什么费用?

搭建海外云服务器需要什么费用?搭建海外云服务器的费用涉及多个方面,包括服务器实例费用、公网带宽费用、磁盘存储费用、操作系统费用和其他费用。具体费用取决于所选的云服务提供商、服务器配置、计费模式等因素。以下是UU云小编整理的一些主要的费用构…

Python 基础语法 - 赋值运算符

运算符说明简单赋值运算符、-、*、/、%、//、**等复合赋值运算符 1. 赋值运算符的功能 所有的赋值运算符都是用来给变量赋值的(都是完成将数据保存到一个变量中)重要结论:所有的赋值运算符表达式都没有结果 -> 无法提供数据 2. 简单赋值…