怎样做百度口碑推广自己的网站,公司logo设计理念,该怎么给做网站的提页面需求,上海本土互联网公司#x1f49d;#x1f49d;#x1f49d;欢迎莅临我的博客#xff0c;很高兴能够在这里和您见面#xff01;希望您在这里可以感受到一份轻松愉快的氛围#xff0c;不仅可以获得有趣的内容和知识#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐#xff1a;「storm…
欢迎莅临我的博客很高兴能够在这里和您见面希望您在这里可以感受到一份轻松愉快的氛围不仅可以获得有趣的内容和知识也可以畅所欲言、分享您的想法和见解。 推荐「stormsha的主页」「stormsha的知识库」持续学习不断总结共同进步为了踏实做好当下事儿~ 专栏导航 Python系列: Python面试题合集剑指大厂Git系列: Git操作技巧GO系列: 记录博主学习GO语言的笔记该笔记专栏尽量写的试用所有入门GO语言的初学者数据库系列: 详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等运维系列: 总结好用的命令高效开发算法与数据结构系列: 总结数据结构和算法,不同类型针对性训练,提升编程思维 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 ✨✨ 欢迎订阅本专栏 ✨✨ The Start点点关注收藏不迷路 文章目录 1、Sanic WebSocket 实现股票实时推送服务1.1. 设置 Sanic WebSocket 服务端1.2. 创建 HTML 客户端代码 2. 实现客户端与服务端的交互3. 总结 1、Sanic WebSocket 实现股票实时推送服务
在本文中我们将详细介绍如何使用 Sanic 框架来实现一个股票实时推送服务并且展示如何在客户端通过 HTML 和 JavaScript 代码接收这些实时更新。Sanic 是一个异步的 Python 框架非常适合构建高性能的 Web 应用程序和 API。我们将通过以下几个步骤来实现这个系统
设置 Sanic WebSocket 服务端创建 HTML 客户端代码实现客户端与服务端的交互
1.1. 设置 Sanic WebSocket 服务端
首先我们需要安装 Sanic 和相关的 WebSocket 库。可以使用以下命令来安装
pip install sanic sanic_cors websockets接下来我们创建一个简单的 Sanic 应用程序并使用 WebSocket 实现实时的股票数据推送。
import json
import uuid
from json import JSONDecodeErrorfrom sanic import Sanic, response
from sanic_cors import CORS, cross_origin
from sanic.websocket import WebSocketProtocol
from websockets import ConnectionClosedError, ConnectionClosedOK
import asyncio
import time
import randomapp Sanic(StockWebSocket)
CORS(app)# 以股票代码为键的字典存储订阅者列表
subscriptions {}# 模拟股票行情数据实际开发中用真实行情源代替
stock_data {a: {stock_name: 阿里, price: 150.00, change: 0.25},b: {stock_name: 百度, price: 2750.00, change: 0.25},t: {stock_name: 腾讯, price: 3400.00, change: 0.25}
}class SubscriptObject(object):def __init__(self, register_id, ws):self.register_id register_idself.ws wsasync def recv(self):try:while True:msg await self.ws.recv()if not msg:continuedata json.loads(msg)action data.get(action)stock_symbol data.get(stock_symbol)if action subscribe:if stock_symbol in stock_data:if not subscriptions.get(stock_symbol):subscriptions[stock_symbol] set()subscriptions[stock_symbol].add(self.ws)else:await self.ws.send(json.dumps({error: Unknown stock symbol}))else:print(f当前状态 {data})except ConnectionClosedError:print(f{self.register_id} 断开连接, 取消监听)except ConnectionClosedOK:print(f{self.register_id} 断开连接, 取消监听)except JSONDecodeError:print(f收到的数据解析失败)finally:# 清理客户端订阅for symbol in subscriptions:subscriptions[symbol].discard(self.ws)print(Client disconnected)async def stock_data_generator():while True:# 模拟股票数据更新stock_code_list list(subscriptions.keys())for symbol in stock_code_list:ws_list subscriptions.get(symbol, []).copy()dd stock_data.get(symbol)data dict()data[stock_name] dd[stock_name]data[price] dd[price] random.uniform(-5, 5)data[change] dd[change] random.uniform(-1, 1)data[timestamp] time.time()for ws in ws_list:try:await ws.send(json.dumps(data))except ConnectionClosedOK:print(连接取消前, subscriptions[symbol])subscriptions[symbol].discard(ws)print(连接取消后, subscriptions[symbol])await asyncio.sleep(1) # 每2秒更新一次app.websocket(/ws/stock)
cross_origin(app) # 为这个路由启用CORS
async def stock_websocket(request, ws):# 模拟实时更新股票价格register_id uuid.uuid4().hexsub_obj SubscriptObject(register_id, ws)await sub_obj.recv()# 启动股票数据更新任务
app.add_task(stock_data_generator())app.route(/)
async def index(request):return await response.file(index.html)if __name__ __main__:app.run(host0.0.0.0, port8000, protocolWebSocketProtocol)1.2. 创建 HTML 客户端代码
我们需要一个简单的 HTML 页面允许用户选择股票符号并通过 WebSocket 连接到服务端以接收实时更新。
!DOCTYPE html
html langen
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleStock Real-time Update/titlestylebody {font-family: Arial, sans-serif;}.stock-data {margin: 20px;padding: 10px;border: 1px solid #ddd;}select {margin: 20px;padding: 5px;}/style
/head
body
h1实时股票行情/h1
select idstock-selectoption valuea阿里/optionoption valueb百度/optionoption valuet腾讯/option
/select
div idstock-container!-- 初始化一个空的 stock-data 元素用于动态添加新的 stock-data 元素 --div classstock-data idstock-data-template styledisplay: none;股票名称: span classstock-name/spanbr涨跌幅: span classchange/spanbr时间戳: span classtimestamp/spanbr/div
/divscriptconst stockSelect document.getElementById(stock-select);const stockContainer document.getElementById(stock-container);const stockDataTemplate document.getElementById(stock-data-template);function updateStock(symbol) {const ws new WebSocket(ws://localhost:8000/ws/stock);const stockDataElement stockDataTemplate.cloneNode(true); // 复制 stock-data 模板元素stockDataElement.id stock-data-${symbol}; // 根据股票代码设置 IDstockDataElement.style.display block; // 显示元素stockContainer.appendChild(stockDataElement); // 将元素添加到容器中ws.onopen function () {console.log(WebSocket connection established.);ws.send(JSON.stringify({action: subscribe,stock_symbol: symbol}));};ws.onmessage function (event) {const data JSON.parse(event.data);const stockData stockDataElement.getElementsByClassName(stock-data)[0];if (data.error) {stockData.innerHTML p${data.error}/p;} else {console.log(ddddddd, data)stockDataElement.getElementsByClassName(stock-name)[0].textContent data.stock_name;stockDataElement.getElementsByClassName(change)[0].textContent data.change;stockDataElement.getElementsByClassName(timestamp)[0].textContent data.timestamp;}};ws.onerror function (error) {console.log(WebSocket Error: , error);};}stockSelect.addEventListener(change, function () {const selectedSymbol stockSelect.value;updateStock(selectedSymbol);});// 初始化加载第一个股票的数据updateStock(stockSelect.value);
/script
/body
/html访问地址http://localhost:8000
2. 实现客户端与服务端的交互
在上面的代码中客户端通过 WebSocket 连接到服务端并根据输入的股票符号接收实时更新。服务端定期推送模拟的股票数据到所有订阅该股票符号的客户端。
3. 总结
通过以上步骤我们实现了一个基于 Sanic 的 WebSocket 股票实时推送服务并创建了一个简单的 HTML 客户端以接收这些实时更新。这个示例可以根据实际需求进行扩展和优化如连接管理、数据来源的整合、错误处理等。希望这个示例能帮助你在实际项目中实现实时数据推送功能。 道阻且长,行则将至,让我们一起加油吧 The End点点关注收藏不迷路
文章转载自: http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.sfrw.cn.gov.cn.sfrw.cn http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn http://www.morning.blzrj.cn.gov.cn.blzrj.cn http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.dcpbk.cn.gov.cn.dcpbk.cn http://www.morning.cgstn.cn.gov.cn.cgstn.cn http://www.morning.ypwlb.cn.gov.cn.ypwlb.cn http://www.morning.wmlby.cn.gov.cn.wmlby.cn http://www.morning.krhkb.cn.gov.cn.krhkb.cn http://www.morning.lylkh.cn.gov.cn.lylkh.cn http://www.morning.xtlty.cn.gov.cn.xtlty.cn http://www.morning.zxqxx.cn.gov.cn.zxqxx.cn http://www.morning.pdwzr.cn.gov.cn.pdwzr.cn http://www.morning.pntzg.cn.gov.cn.pntzg.cn http://www.morning.mnclk.cn.gov.cn.mnclk.cn http://www.morning.krbjb.cn.gov.cn.krbjb.cn http://www.morning.zypnt.cn.gov.cn.zypnt.cn http://www.morning.xsklp.cn.gov.cn.xsklp.cn http://www.morning.bkslb.cn.gov.cn.bkslb.cn http://www.morning.pphbn.cn.gov.cn.pphbn.cn http://www.morning.ybyln.cn.gov.cn.ybyln.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.ppdr.cn.gov.cn.ppdr.cn http://www.morning.glnmm.cn.gov.cn.glnmm.cn http://www.morning.sbyhj.cn.gov.cn.sbyhj.cn http://www.morning.mkygc.cn.gov.cn.mkygc.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn http://www.morning.hlrtzcj.cn.gov.cn.hlrtzcj.cn http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn http://www.morning.xyrss.cn.gov.cn.xyrss.cn http://www.morning.ujianji.com.gov.cn.ujianji.com http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.nmnhs.cn.gov.cn.nmnhs.cn http://www.morning.xzlp.cn.gov.cn.xzlp.cn http://www.morning.xhjjs.cn.gov.cn.xhjjs.cn http://www.morning.cffwm.cn.gov.cn.cffwm.cn http://www.morning.rbyz.cn.gov.cn.rbyz.cn http://www.morning.fbtgp.cn.gov.cn.fbtgp.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.qfrsm.cn.gov.cn.qfrsm.cn http://www.morning.ntgrn.cn.gov.cn.ntgrn.cn http://www.morning.hhxkl.cn.gov.cn.hhxkl.cn http://www.morning.gglhj.cn.gov.cn.gglhj.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.dtzxf.cn.gov.cn.dtzxf.cn http://www.morning.jcwt.cn.gov.cn.jcwt.cn http://www.morning.nrrzw.cn.gov.cn.nrrzw.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn http://www.morning.rsjng.cn.gov.cn.rsjng.cn http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn http://www.morning.bxqtq.cn.gov.cn.bxqtq.cn http://www.morning.rongxiaoman.com.gov.cn.rongxiaoman.com http://www.morning.fhtmp.cn.gov.cn.fhtmp.cn http://www.morning.jxdhc.cn.gov.cn.jxdhc.cn http://www.morning.tkztx.cn.gov.cn.tkztx.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.gjlxn.cn.gov.cn.gjlxn.cn http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn http://www.morning.qwwcf.cn.gov.cn.qwwcf.cn http://www.morning.ywxln.cn.gov.cn.ywxln.cn http://www.morning.mqzcn.cn.gov.cn.mqzcn.cn http://www.morning.xrtsx.cn.gov.cn.xrtsx.cn http://www.morning.nckjk.cn.gov.cn.nckjk.cn http://www.morning.bnkcl.cn.gov.cn.bnkcl.cn http://www.morning.hpdpp.cn.gov.cn.hpdpp.cn http://www.morning.tplht.cn.gov.cn.tplht.cn http://www.morning.nzcys.cn.gov.cn.nzcys.cn http://www.morning.dnqpq.cn.gov.cn.dnqpq.cn http://www.morning.cfcdr.cn.gov.cn.cfcdr.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.dbdmr.cn.gov.cn.dbdmr.cn http://www.morning.rqhbt.cn.gov.cn.rqhbt.cn http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.drrt.cn.gov.cn.drrt.cn