首页 > 其他分享 >tornado-SSE exmaple demo

tornado-SSE exmaple demo

时间:2024-10-21 14:42:31浏览次数:1  
标签:Control const tornado self exmaple SSE data app

html不需要库直接F12看
tornado:
1.注意同步异步,其他接口不要卡死 tornado.gen.sleep(1)
2.跨域Access-Control要注意 我之前忘了那三个语句卡住了
还是不熟悉基础知识,要多补习

tornado:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
# @Author  : d7L
# @Date    : 2024/10/21 10:46
# @File    : sse_tornado.py
# @Description: 
"""
import tornado.ioloop
import tornado.web
import datetime

class SSEHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.set_header('Content-Type', 'text/event-stream')
        self.set_header('Cache-Control', 'no-cache')
        self.set_header('Connection', 'keep-alive')

        self.set_header('Access-Control-Allow-Origin', "*")
        self.set_header('Access-Control-Allow-Headers', "Content-Type")
        self.set_header('Access-Control-Allow-Methods', "GET, POST, OPTIONS")

    async def get(self):
        try:
            while True:
                data = f'data: Current time is {datetime.datetime.now().strftime("%H:%M:%S")}\n\n'
                self.write(data)
                await self.flush()
                await tornado.gen.sleep(1)
        except tornado.iostream.StreamClosedError:
            pass

def make_app():
    return tornado.web.Application([
        (r"/events", SSEHandler),
    ])

if __name__ == "__main__":
    print("go...")
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

html::

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
</head>

<body>
    <script>
        // 创建 EventSource 对象

        const eventSource = new EventSource('http://127.0.0.1:8000/events');
        // 处理接收到的消息
        eventSource.onmessage = function (event) {
            console.log(event.data);
            document.getElementById('result').innerHTML = event.data;
        };

        // 处理错误
        eventSource.onerror = function (error) {
            console.error('SSE Error:', error);
        };
    </script>
    <div id="result"></div>
</body>

</html>

js(没有tornado才用,测后端不需要,前端自己调的):

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors({
    origin: '*',
    methods: ['GET', 'POST', 'OPTIONS'],
    allowedHeaders: ['Content-Type']
}));

app.get('/events', (req, res) => {
    res.writeHead(200, {
        'Content-Type': 'text/event-stream',
        'Cache-Control': 'no-cache',
        'Connection': 'keep-alive'
    });

    const intervalId = setInterval(() => {
        const data = `data: Current time is ${new Date().toLocaleTimeString()}\n\n`;
        res.write(data);
    }, 1000);

    req.on('close', () => {
        clearInterval(intervalId);
    });
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running at port ${port}`);
});

标签:Control,const,tornado,self,exmaple,SSE,data,app
From: https://www.cnblogs.com/d37eirin/p/18489476

相关文章

  • 突然断电重启mysql报错[ERROR] [MY-013183] [InnoDBl Assertion failure: trxotypes.h
    当你遇到断电重启后MySQL报告[ERROR][MY-013183][InnoDB]Assertionfailure:trxotypes.h:541:m_rsegs_n<2这样的错误时,这通常指示InnoDB存储引擎在尝试恢复或初始化其内部数据结构时遇到了问题。这个问题很可能是由于断电导致的未正常关闭和文件系统的不一致状态。......
  • web assembly 初体验
    License:CCBY-NC-SA4.0我写了一个程序,可以在各个平台运行吗?可以,用跨平台库。如何做到“不用下载,点击即玩”呢?做成网页。但是它已经用c/cpp(或其他编程语言,此处用c/cpp举例)写完了……WebAssembly,启动!WebAssembly是什么这是一段介绍。省流:WebAssembly是一......
  • 深度学习_多层感知机基于Heart Disease UCI 数据集中的processed.cleveland.data训练
    多层感知机(Muti-Layerperceptron)#1.数据导入importpandasaspdnames=["age","sex","cp","trestbps","chol","fbs","restecg",......
  • paper、essay、thesis和dissertation的区别
    paper、essay、thesis和dissertation都有论文的意思。paper和essay指与获取学位无关的相对较短的文章。essay通常结构简单,内容较少。而researchpaper则内容丰富全面,且对引用的内容的可信度有较高要求。但是单就essay和paper这俩词来说,区别还是要看具体语境。比如UPEI的网站上就......
  • C#图像处理与OCR:从验证码识别到文本提取 Tesseract实现验证码识别:本地化
    以下示例代码中,涉及到的知识点主要包括图像处理、验证码识别、Base64转换、图像预处理等。以下是详细的知识点梳理,以及相应的代码示例:1.图像加载与保存使用Image.FromFile加载本地图像,并使用Bitmap进行图像操作。Bitmap是图像处理的主要类,支持各种图像操作。代码......
  • 10月报名 | 海克斯康ODYSSEE平台:AI/ML在仿真中的应用培训
    您好!感谢您长期以来对优飞迪科技与海克斯康的关注与支持。我们诚邀您参加10月24日-25日的海克斯康ODYSSEE平台:AI/ML在仿真中的应用培训培训,本次培训将为您带来ODYSSEE模块、功能及应用案例介绍,ODYSSEECAE功能培训等精彩内容,并辅以联合仿真实操帮助您更好了解ODYSSEE这款跨学......
  • django实现sse接口
    基于django来实现sse最近在实现通过post调用三方的接口得到sse流数据,并且自己需要用拿到的数据用sse流在返回给前端fromrest_framework.viewsimportAPIViewfromdjango.httpimportStreamingHttpResponse,JsonResponseclassChatMessageViewSet(APIView):defpost......
  • jar包内替换依赖jar后无法启动,错误日志:It has been compressed and nested jar files
    jar包内替换依赖jar后无法启动,错误日志:Ithasbeencompressedandnestedjarfilesmustbestoredwithoutcompression.ruoyi、springboot、java、jar、libs、压缩背景某服务jar包足足90MB有余,远程传输太慢,目前在改动的是其中的某子jar(项目内部依赖,另一个jar)。之前......
  • jar包内替换依赖jar后无法启动,错误日志:It has been compressed and nested jar files
    jar包内替换依赖jar后无法启动,错误日志:Ithasbeencompressedandnestedjarfilesmustbestoredwithoutcompression.ruoyi、springboot、java、jar、libs、压缩背景某服务jar包足足90MB有余,远程传输太慢,目前在改动的是其中的某子jar(项目内部依赖,另一个jar)。之前......
  • WebAssembly 基础以及结合其他编程语言
    0x00WebAssembly基础详情参考《WebAssembly|MDN》(1)概述WebAssembly简称WASM或WA,是一种新的编码方式,可以在现代的Web浏览器中运行可以通过编译器,把多种编程语言(如C/C++、C#、Go、Python、Rust、TypeScript等)编写的代码转化为WA,并在浏览器中使用特点:灵活度高......