股票学习网

股票入门基础知识_炒股入门与技巧_怎么买股票 - 股票学习网!

股票实时数据连接和股票实时数据软件

2024-03-29 18:48分类:炒股技巧 阅读:

平时我们开发中使用的Http请求响应时,都是由客户端主动发送请求到服务端,然后服务器处理请求后返回结果,服务器无法主动向客户端浏览器发送消息。

但是在某些业务场景下我们需要由服务器主动发送消息到客户端浏览器,例如需要在网页上显示股票实时数据或者实时排行榜单等实时变化的数据。对于此类需求,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源,而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。

今天我们介绍一种允许服务端主动向客户端推送数据,在客户端与服务器两者之间可以创建持久性连接,并进行双向数据传输的技术-WebSocket

介绍

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。来源:百度百科

简单理解就是客户端发起请求,此时先使用Http进行握手,然后再进行类似于Socket的长连接 。一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。在长连接期间,服务器端可以向客户端发送信息,客户端也可以向服务器端发送信息,并且客户端断开 WebSocket 连接或 Server 端断掉连接前,都不需要客户端和服务端重新发起连接请求。当当前任务完成后,由客户端或者服务器端进行断开连接操作,然后长连接断开。

特点

较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。

更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。

保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。

更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。

可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。

更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。

WebSocket与Http和Socket的区别

Socket:

Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,Socket上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口

Http:

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上 它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应 一次请求,一次响应(轮询操作);是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理,HTTP 协议无法实现服务器主动向客户端发起消息。

WebSocket:

WebSocket协议是基于TCP的一种新的网络协议,和Http协议一样属于应用层协议,是一种让客户端和服务器之间能进行

双向实时通信的技术。

WebSocket与Socket的区别:WebSocket是应用层协议,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口(不是协议,为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口)。

实践

POM:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-Websocket</artifactId> <version>1.3.8</version> </dependency>

开启WebSocket:

@Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }

服务器端:

@Service //定义当前WebSocket的url,方便客户端进行连接 @ServerEndpoint(value = "/webSocket/{userId}") @Slf4j public class WebSocketServer { //记录当前在线的人数 private static AtomicInteger onLineCount = new AtomicInteger(); // 存放每个客户端对应的请求 private static ConcurrentHashMap<String, WebSocketServer> webScoketMap = new ConcurrentHashMap<String, WebSocketServer>(); //连接会话 通过改会话发送数据 private Session session; //WebSocket的唯一标识ID private String userId; /** * @author wangpeng * @apiNote 与前端建立连接成功之后需要调用的方法 使用webSockerMap 进行当前在线人数的管理 * @OnOpen注解是在客户端与服务器端连接后被调用 * @param session 数据交互的通道 * @param userId 唯一ID * @date 2023/8/14 5:05 下午 **/ @OnOpen public void onOpen(@PathParam("userId") String userId,Session session) { Map<String, List<String>> requestParameterMap = session.getRequestParameterMap(); this.session = session; this.userId = userId; webScoketMap.put(userId, this); onLineCount.incrementAndGet(); log.info("用户userId=[{}]连接,当前在线人数:[{}]:", userId, onLineCount.get()); try { // 告诉客户端 本次连接成功 sendMessage("当前客户id+"userId"+连接成功",session); } catch (Exception e) { log.error("用户userId=[{}]网络异常!!!", userId); } } /** * @author wangpeng * @apiNote 连接断开的时候移除在线 下次不在推送消息 * @OnClose注解是在客户端与服务器端断开连接时被调用 * @date 2023/8/14 5:05 下午 **/ @OnClose public void onClose() { if (webScoketMap.containsKey(userId)) { webScoketMap.remove(userId); onLineCount.decrementAndGet(); } log.info("用户userId=[{}]退出连接,当前在线人数为[{}]:", this.userId, onLineCount.get()); } /** * @author wangpeng * @apiNote 连接断开的时候移除在线 下次不在推送消息 * @OnError注解是在客户端与服务器端发生错误时被调用 * @param error 错误原因 * @date 2023/8/14 5:05 下午 **/ @OnError public void onError(Throwable error) { log.error("用户userId=[{}]出现错误,错误原因:[{}]", this.userId, error.getMessage()); } /** * @apiNote 接收到客户端发送过来的消息 * @author wangpeng * @date 2023/8/14 5:05 下午 * @param message 客户端发送的消息 * @param session 当前客户端的会话 */ @OnMessage public void onMessage(String message, Session session) { log.info("接受到用户userId=[{}]的消息为:", this.userId, message); try { if (StringUtils.isNotBlank(message)) { //处理消息逻辑 } } catch (Exception e) { log.error("userId=[{}]接受客户端消息或解析客户端消息异常[{}]", this.userId, e.getMessage()); } } /** * @apiNote 实现服务器主动推送消息 * @author wangpeng * @date 2023/8/14 5:05 下午 * @param message 需要发送的消息 * @throws Exception */ public void sendMessage(String message,Session session) throws Exception { session.getBasicRemote().sendText(message); } }

客户端:

public class WebSocketTest { //服务器WebSocket 连接地址 private static final String WS_URI = "ws://localhost:8080/webSocket?userId=1"; public static void main(String[] args) throws IOException, InterruptedException { //标准的webSocket客户端 StandardWebSocketClient client = new StandardWebSocketClient(); WebSocketConnectionManager manager = new WebSocketConnectionManager(client, new MyHandler(), WS_URI); manager.start(); Thread.sleep(100000); } private static class MyHandler extends TextWebSocketHandler { //建立连接后,执行的回调函数 @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("connected..........."); session.sendMessage(new TextMessage("hello, web socket")); super.afterConnectionEstablished(session); } //解析服务端发送的消息 @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { System.out.println("receive: " + message.getPayload()); super.handleTextMessage(session, message); } } }

 

智通财经APP获悉,10月28日,远光软件(002063.SZ)在接受调研时表示,远光DAP是采用新理念、新技术、新模式构建的超越传统ERP的企业级核心应用。其中,新模式指远光DAP由企业内部融合扩展到产业链上下游协同,构建“政企、税企、银企、企企”直连的产业生态。已成功应用于能源电力、航天航空、高端装备、冶金冶炼、制造、金融、医疗卫生等多个行业;在区块链技术应用上,目前公司区块链技术已应用于“双碳”、财务无纸化、智慧审计、司法存证等项目中,服务客户已涵盖电网、电厂、医疗、珠海市新阶联、澳门科技大学等企事业和社会组织。同时,公司持续推进与国网数科公司的业务融合,围绕多个场景进行了区块链技术及业务应用的融合探索。未来,公司将持续推动区块链产业发展,建立远光区块链应用生态。

远光软件公布,2022 年三季度,公司业绩稳步增长,实现营业收入13.44亿元,同比增长17.41%;实现归属于上市公司股东的净利润 1.47 亿元,同比增长 2.96%;归属于上市公司股东的扣除非经常性损益后的净利润为 1.37 亿元,同比增长 0.20%。在业务盈利模式上,由于公司是中国大型和超大型集团企业管理软件的主要提供商,产品除面向电力行业市场,还支持生产制造、医疗行业、轨道交通、航空、能源化工、钢铁等多个行业市场客户。公司在销售标准产品的基础上,同时结合集团客户的个性化需求提供定制开发的增值服务。产品销售后,公司会持续为客户提供标准售后服务产品和增值服务产品,并取得服务收入。

远光软件介绍,公司新一代企业数字核心系统远光DAP是面向大型集团企业研发的全栈国产化的大型管理软件,是基于云大物移智等新技术构建的新一代数字核心应用,既满足企业内各部门业财一体化,集团内多板块的横向贯通,实现企业整体数据的互联互通、信息共享与业务协同,又满足多种集团管控模式下的集团资源集中管理、统一调配,提升集团的资源配置效率和价值创造水平。同时实现上下游产业用户泛在连接、业务协同处理、交易实时反映、客商互联互通,加强大型企业引领带动作用,培育产业发展新模式。

公司透露,远光DAP是采用新理念、新技术、新模式构建的超越传统ERP的企业级核心应用,新理念指远光DAP的应用模式由业务流程驱动转变为“流程+数据”的双轮驱动;新技术指远光DAP由原来的单体架构升级为基于微服务、中台化的云原生架构,不动代码即可实现对组织、流程、管理模式的持续优化,系统调整灵活、应用随需而变,实现从芯片、服务器、操作系统、数据库、中间件、浏览器等全栈式国产化适配,并通过了第三方的专业测评,在安全、性能、功能方面达到业内领先。

在电力市场交易业务方面,公司面向售电公司持续完善售电公司电力交易管理服务产品,提供SAAS与信息化业务定制开发服务。协同国网数科公司团队,持续支撑“网上国网”电力市场业务,开展电力市场化服务专区建设。不断完善“电力市场售电服务平台”建设,搭建电力交易辅助服务、市场增值服务、新兴产业服务三大服务能力,积极落实“全国统一电力市场”的建设要求;整合中长期购电结算、可再生能源补贴资金结算等业务环节,满足对电厂、售电公司、电力用户结算服务深度和广度的跨越提升,全面提高电网企业与市场成员用户信息的共享交互效率和质量。

从投资计划上看,公司未来将会在大数据、云计算、人工智能、区块链、元宇宙等技术领域加大投入,以技术驱动创新。结合新型电力系统建设和全国统一电力市场建设的需求,积极布局和加强公司在能源数字技术、能源金融科技和能源电子商务领域的信息化支撑能力,持续推进与控股股东的协同与融合;深入挖掘客户需求,不断完善公司产品线;不断拓展公司产品在电力行业外的应用范围,积极开拓新的业务领域。重点关注数字企业、智慧能源、信创平台、社会互联方面的投资并购机会。

https://www.haomiwo.com

上一篇:新手炒股看哪本书或新手炒股票看什么书好一点

下一篇:决策天机同炒股软件主力资金决策版

相关推荐

返回顶部