Android SSE 单向接收数据

server/2024/10/5 22:23:31/

Server-Sent Events(SSE)是一种在客户端和服务器之间实现单向实时通信的技术。它允许服务器向客户端推送数据,但客户端无法使用 SSE 向服务器发送数据。这使得其适用于需要持续接收服务器数据的应用场景(如实时通知、股票行情、社交媒体更新等)

相比于其他技术如 WebSocket,SSE 更简单和轻量,但仅适用于信息量不大的单向数据流。大多数现代浏览器都支持 SSE,并且其内置的自动重连机制进一步增强了其可靠性。

因为安卓原生对 SSE 的支持非常有限,所以通常会使用第三方库来管理与服务器的连接和事件接收(Okhttp 的 SSE 扩展库)

    implementation("com.squareup.okhttp3:okhttp-sse:4.12.0")

object SSEManager {private val TAG = SSEManager::class.java.simpleNameprivate var event: RealEventSource? = nullfun connect() {val sseUrl = "" // SSE 连接域名val request = Request.Builder().url(sseUrl).build()val okHttpClient = OkHttpClient.Builder().also {it.connectTimeout(1, TimeUnit.DAYS)it.readTimeout(1, TimeUnit.DAYS)}.build()event = RealEventSource(request, object : EventSourceListener() {override fun onOpen(eventSource: EventSource, response: Response) {Log.v(TAG, "onOpen: ")}override fun onEvent(eventSource: EventSource, id: String?, type: String?, data: String) {Log.v(TAG, "data: $data")}override fun onClosed(eventSource: EventSource) {Log.e(TAG, "onClosed: ")}override fun onFailure(eventSource: EventSource, t: Throwable?, response: Response?) {Log.e(TAG, "onFailure: $t    $response")}})event?.connect(okHttpClient)}fun release() {event?.cancel()}}

可以看到使用 Okhttp 的 SSE 功能和普通的网络请求大同小异,可以在 Request 上自行配置请求信息。服务端推送时会把信息回调到 onEvent 方法,然后根据 data 数据去做我们的业务需求即可


需要注意的是,在不使用 SSE 连接的时候要及时释放资源,否则可能会导致内存泄漏、电池消耗增加、网络资源浪费、服务器压力增加以及应用性能问题。因此,务必在适当的生命周期阶段释放连接,确保资源得以正确管理和释放,以保持应用的稳定性和高性能。


http://www.ppmy.cn/server/113866.html

相关文章

SpringMvc的具体操作,如何配置springMvc(完整教程)

第一步&#xff1a;引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-w…

在前端中Proj4.js使用简单介绍

Proj4 是一个用于处理 JavaScript 里的几何图形和坐标计算的库。虽然这个库的知名度不如其他几何处理库如 Turf.js&#xff0c;但它提供了用于多边形、点、线等几何对象的计算功能&#xff0c;类似于 GIS&#xff08;地理信息系统&#xff09;的某些功能。 一、基础知识 在使…

【软件设计】常用设计模式--概述

学习设计模式是提高软件开发技能的重要步骤。下面是一些最常用的设计模式&#xff0c;以及它们的基本概念和使用场景&#xff1a; 1. 单例模式&#xff08;Singleton Pattern&#xff09; 概念: 确保一个类只有一个实例&#xff0c;并提供全局访问点。 使用场景: 适用于需要全…

Windows 11的新游戏手柄键盘现在可让玩家使用Xbox手柄打字

微软已开始测试 Windows 11 中专为 Xbox 控制器设计的全新游戏手柄键盘布局。游戏手柄键盘布局改进了 Windows 11 中的屏幕键盘&#xff0c;因此玩家可以使用 Xbox 控制器在操作系统中打字或导航。 作为 Windows 11 测试版的一部分&#xff0c;游戏手柄键盘目前正在测试中&…

大零售时代:开源 AI 智能名片、2+1 链动与 O2O 商城小程序引领融合新趋势

摘要&#xff1a;本文深入探讨了当今零售业态的发展趋势&#xff0c;指出在数据匹配的时代&#xff0c;人依然在零售中发挥着重要作用。通过对大零售理念的阐述&#xff0c;分析了跨行业跨业态融合的必然性&#xff0c;强调了业态融合的指导思想以及实现方式。同时&#xff0c;…

HarmonyOS开发实战( Beta5.0)Native Drawing自绘制能力替代Canvas提升性能

简介 Canvas 画布组件是用来显示自绘内容的组件&#xff0c;它具有保留历史绘制内容、增量绘制的特点。Canvas 有 CanvasRenderingContext2D/OffscreenCanvasRenderingContext2D 和 DrawingRenderingContext 两套API&#xff0c;应用使用两套API绘制的内容都可以在绑定的 Canv…

Java项目——苍穹外卖(一)

Entity、DTO、VO Entity&#xff08;实体&#xff09; Entity 是表示数据库表的对象&#xff0c;通常对应数据库中的一行数据。它通常包含与数据库表对应的字段&#xff0c;并可能包含一些业务逻辑。 DTO&#xff08;数据传输对象&#xff09; 作用&#xff1a;DTO 是用于在…

【docker】通过云服务器安转Docker

一、前言 这里关于Docker的安转&#xff0c;大家可以采用本地使用虚拟机来运行和安转Docker,我这里呢就采用云服务器来安装Docker,之所以用云服务器安转docker是因为比较简单&#xff0c;只是需要花一点money,而且自己没有用过云服务器所以这里就用这种方式来安转Docker了&…