首页 > 其他分享 >sse_server sent event_eventSource_websocket替代_socketio替代_服务器端事件

sse_server sent event_eventSource_websocket替代_socketio替代_服务器端事件

时间:2023-11-05 09:33:53浏览次数:35  
标签:websocket 服务器端 counter update event 事件 替代 gen

event source backend

# -*- coding: utf-8 -*-
# 这段代码是使用FastAPI框架创建一个简单的服务器端事件(Server-Sent Events,SSE)的示例。以下是对代码的详细解析:
# 1. `import json, random, ...`:这行代码导入了需要的Python模块。
# 2. `event_router = APIRouter()`:这行代码创建了一个新的APIRouter对象,用于定义路由。
# 3. `async def gen(): `:这行代码定义了一个异步生成器函数`gen`。这个函数每次被调用时,都会生成一个新的服务器端事件,事件的数据是一个包含随机整数的JSON对象。
# 4. `yield "event: update\ndata: " + json.dumps({'counter': random.randint(0, 100)}) + "\n\n"`:这行代码生成了一个新的服务器端事件。事件的类型是`update`,数据是一个包含随机整数的JSON对象。
# 5. `@ event_router.get('/event', summary='视频流',  description='视频流')`:这行代码定义了一个新的GET路由`/ event`。这个路由的摘要和描述都是`视频流`。
# 6. `async def get_event(): `:这行代码定义了一个新的异步处理函数`get_event`。这个函数被调用时,会返回一个新的StreamingResponse对象。
# 7. `return StreamingResponse(gen(), media_type='text/event-stream')`:这行代码创建了一个新的StreamingResponse对象。这个对象的内容是`gen`函数生成的服务器端事件,媒体类型是`text/event-stream`。
# 总的来说,这段代码创建了一个简单的服务器端事件(SSE)服务器。当客户端发送GET请求到`/ event`路由时,服务器会返回一个流,这个流的内容是由`gen`函数生成的服务器端事件。每个事件的数据是一个包含随机整数的JSON对象。这是一种常见的使用FastAPI和服务器端事件(SSE)实现实时通信的方法。

import json
import random
from fastapi import APIRouter, Depends, Request, Response, UploadFile
from fastapi.responses import StreamingResponse


event_router = APIRouter()


async def gen():

    # 4. `yield "event: update\ndata: " + json.dumps({'counter': random.randint(0, 100)}) + "\n\n"`:这行代码生成了一个新的服务器端事件。
    # 事件的类型是`update`,数据是一个包含随机整数的JSON对象。
    yield "event: update\ndata: " + json.dumps({'counter': random.randint(0, 100)}) + "\n\n"


@event_router.get('/', summary='event',  description='event')
async def get_event():
    return StreamingResponse(gen(), media_type='text/event-stream')

frontend

export function setupCounter(element: HTMLButtonElement) {
  let counter = 0;
  const setCounter = (count: number) => {
    counter = count;
    element.innerHTML = `count is ${counter}`;
  };
  setCounter(0);

  const eventSource = new EventSource("http://127.0.0.1:8000/v1/event/");
  eventSource.addEventListener("update", (event) => {
    // console.log(event.data);
    const data = JSON.parse(event.data);
    //  do something with data
    setCounter(data.counter);
  });
  // close event source
  element.addEventListener("click", () => eventSource.close());
}

标签:websocket,服务器端,counter,update,event,事件,替代,gen
From: https://www.cnblogs.com/zhuoss/p/17810239.html

相关文章

  • 使用websocket开发智能聊天机器人
    前面我们学习了异步web框架(sanic)和http异步调用库httpx,今天我们学习websocket技术。websocket简介我们知道HTTP协议是:请求->响应,如果没有响应就一直等着,直到超时;但是有时候后台的处理需要很长时间才能给到结果,比如30分钟,那HTTP的请求不可能等这么久,所以,可以通过Ajax轮询来解决。......
  • 【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
    Failedtopullimage"k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.1.2-r2":rpcerror:code=Unknowndesc=Errorresponsefromdaemon:Gethttps://k8s.gcr.io/v2/:net/http:requestcanceledwhilewaitingforconnection(......
  • [win]alt + tab 替代品 switcheroo
    作为windows10alt+tab的增强品:分享下: 原版:https://github.com/elig0n/Switcheroo 单击版本https://github.com/elig0n/Switcheroo/releases/tag/elig0n-r1 ===2023813现在觉得win下有一个叫Alt-TabTerminator的软件更好用  ......
  • fastapi websockets
    #pipinstallwebsocketsfromuvicornimportrunfromfastapiimportFastAPIapp=FastAPI(title="websocket")fromtypingimportListfromfastapiimportFastAPI,WebSocket,WebSocketDisconnectfromfastapi.responsesimportHTMLResponseht......
  • 为什么Spring和IDEA不推荐使用@Autowired注解,有哪些替代方案?
    引言在使用Spring框架和JetBrainsIDEA集成开发环境(IDE)进行Java开发时,你可能经常会遇到@Autowired注解。@Autowired是Spring框架中用于实现依赖注入的核心注解之一。然而,近年来,Spring和IDEA都不再推荐使用@Autowired注解,并提出了更好的替代方案。本文将详细分析为什么Spring和IDE......
  • netty同时支持tcp和websocket
    最近接手了别人的netty框架实现的im的一个项目,基于tcp实现通信,但是领导要求做一个网页版的聊天,接入到目前的系统,由于第一次接触这种项目,百度一圈大部分都是通过websocket实现通信的方式,最后通过chatgpt发现确实可以同时支持tcp和websocket,现在把方式放上Netty是一个高性能、异步事......
  • .net5 websocket 客户端
    stringurl="http://127.0.0.1:2141";HubConnection_conn=newHubConnection(url,true);IHubProxy_proxy=_conn.CreateHubProxy($"/MyHub");_conn.Start();//定义客户端的方法sendMessage()(有两个string类型的参数,当服务端调用sendMessage,需要传入2个string类型参......
  • Protocol - Socket v.s. WebSocket
    总结什么是socket?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。  什么是WebSocket?WebSocket是实现了浏览器与服务器的全双工通信协议,一个模拟Socket的应用层......
  • API - 几种API接口模式 - RESTful、WebSocket、GraphQL、gRPC、Webhook
    总结TODO.....当思考使用哪种API接口时,你将会面临一个重要的决策。RESTful、GraphQL、gRPC、WebSocket和Webhook是当前流行的几种API接口模式。在本文中,我们将介绍这些接口的特点、用途和比较,帮助你选择最适合你应用程序需求的接口。引言随着现代应用程序的复杂性和用户期望的......
  • 某全球领先的晶圆代工企业:替代FTP实现大规模文件的高效传输
    全球领先的集成电路晶圆代工企业之一该企业不仅是全球领先的集成电路晶圆代工企业之一,也是中国内地技术最先进、配套最完善、规模最大、跨国经营的集成电路制造企业集团。主要业务是根据客户本身或第三者的集成电路设计,为客户制造集成电路芯片,是纯商业性集成电路代工厂。需求和......