当前位置: 首页 > news >正文

做网站 思源字体餐饮品牌vi设计包括哪些

做网站 思源字体,餐饮品牌vi设计包括哪些,营销策划方案制定,怎样网站设计SSE 是一种单向通信#xff0c;只允许服务器向客户端发送数据。客户端无法向服务器发送数据。SSE 建立在 HTTP 协议之上#xff0c;使用标准 HTTP 请求和响应。SSE 不需要额外的库或协议处理#xff0c;客户端可以使用浏览器的原生 EventSource API 来接收数据。SSE 支持跨域…SSE 是一种单向通信只允许服务器向客户端发送数据。客户端无法向服务器发送数据。SSE 建立在 HTTP 协议之上使用标准 HTTP 请求和响应。SSE 不需要额外的库或协议处理客户端可以使用浏览器的原生 EventSource API 来接收数据。SSE 支持跨域通信可以通过 CORS跨域资源共享机制进行配置。SSE 在现代浏览器中也得到广泛支持但与 WebSocket 相比它的历史要长一些。 import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/*** 数据管理器用于管理Server-Sent Events (SSE) 的订阅和数据推送。* author xiaobo*/ Component public class DataManager {private final MapString, ListSseEmitter dataEmitters new HashMap();/*** 订阅特定数据类型的SSE连接。** param dataType 要订阅的数据类型* param emitter SSE连接*/public void subscribe(String dataType, SseEmitter emitter) {dataEmitters.computeIfAbsent(dataType, k - new ArrayList()).add(emitter);emitter.onCompletion(() - removeEmitter(dataType, emitter));emitter.onTimeout(() - removeEmitter(dataType, emitter));}/*** 推送特定数据类型的数据给所有已订阅的连接。** param dataType 要推送的数据类型* param data 要推送的数据*/public void pushData(String dataType, String data) {ListSseEmitter emitters dataEmitters.getOrDefault(dataType, new ArrayList());emitters.forEach(emitter - {try {emitter.send(SseEmitter.event().data(data, MediaType.TEXT_PLAIN));} catch (IOException e) {removeEmitter(dataType, emitter);}});}private void removeEmitter(String dataType, SseEmitter emitter) {ListSseEmitter emitters dataEmitters.get(dataType);if (emitters ! null) {emitters.remove(emitter);}} } import com.todoitbo.baseSpringbootDasmart.sse.DataManager; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import javax.annotation.Resource; /** * author xiaobo */ RestController RequestMapping(/environment) public class EnvironmentController { Resource private DataManager dataManager; GetMapping(value /subscribe, produces MediaType.TEXT_EVENT_STREAM_VALUE) public SseEmitter subscribe() { SseEmitter emitter new SseEmitter(); dataManager.subscribe(environment, emitter); return emitter; } // 示例推送环境监测数据给前端 GetMapping(/push/{testText}) public ResponseEntityString pushEnvironmentData(PathVariable String testText) { dataManager.pushData(environment, testText); return ResponseEntity.ok(Data pushed successfully.); } }如果没有数据产生会出现连接超时问题。 默认情况下EventSource对象会自动重连以保持连接的持久性。 第一次订阅SSE连接后即使后端没有数据产生之后也能接收到数据。这可以通过定期发送心跳数据 Scheduled(fixedRate 30000) // 每30秒发送一次心跳数据 public void sendHeartbeat() {dataManager.pushData(heartbeat, Heartbeat data); }!DOCTYPE html html headtitleSSE Data Receiver/title /head bodyh1Real-time Data Display/h1div iddata-container/divscriptconst dataContainer document.getElementById(data-container);// 创建一个 EventSource 对象指定 SSE 服务器端点的 URLconst eventSource new EventSource(http://127.0.0.1:13024/environment/subscribe); // 根据你的控制器端点来设置URLeventSource.onopen function(event) {};// 添加事件处理程序监听服务器端发送的事件eventSource.onmessage (event) {const data event.data;// 在这里处理从服务器接收到的数据// 可以将数据显示在页面上或进行其他操作const newDataElement document.createElement(p);newDataElement.textContent data;dataContainer.appendChild(newDataElement);};eventSource.onerror (error) {// 处理连接错误console.error(Error occurred:, error);// 重新建立连接eventSource.close();setTimeout(() {// 重新建立连接eventSource new EventSource(/environment/subscribe);}, 1000); // 1秒后重试};/script /body /html 精简版后端 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import java.io.IOException; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicLong;RestController SpringBootApplication public class SseApplication {private final CopyOnWriteArrayListSseEmitter emitters new CopyOnWriteArrayList();private final AtomicLong counter new AtomicLong();public static void main(String[] args) {SpringApplication.run(SseApplication.class, args);}GetMapping(/sse)public SseEmitter handleSse() {SseEmitter emitter new SseEmitter();emitters.add(emitter);emitter.onCompletion(() - emitters.remove(emitter));new Thread(() - {try {for (int i 0; i 10; i) {emitter.send(SseEmitter.event().id(String.valueOf(counter.incrementAndGet())).name(message).data(This is message i));Thread.sleep(1000);}emitter.complete();} catch (IOException | InterruptedException e) {emitter.completeWithError(e);}}).start();return emitter;} }
http://www.pierceye.com/news/346131/

相关文章:

  • 有回定ip怎么做网站青岛建设集团招聘信息网站
  • 淘宝内部卷网站怎么做智慧团建网站登录忘记密码
  • 网站建设前十名建站系统cms
  • 第三方网站开发的商家厦门广告公司网站建设
  • 网站建设基础条件临猗网站制作
  • 建设博客网站步骤常州网站建设百科
  • 门户网站 管理系统wordpress 微信图标
  • 广元网站建设广元莱芜论坛二手车
  • 山东省建设工程质量监督网站广州软件合作中心
  • 郑州网站建设怎么样通州建设局网站
  • 免费网站建设福州怎么修改网站主页
  • 深圳企业建站设计公司wordpress不显示样式
  • 外贸网站商城广东省建设协会网站
  • 杭州制作企业公司网站wordpress数据库添加用户
  • 主域名进入网站广告标识标牌制作厂家
  • 网站建设基础流程摘要专题网站建设策划
  • 滁州网站建设电话网站建设与网站优化
  • 慈溪做网站公司哪家好淘宝商城的网站建设
  • 安徽建设厅网站怎么打不开太原网络搭建
  • idea 网站开发最好的免费推广平台
  • 专业排名优化网站怎么建网站教程视频app
  • 全国八大员报名官方网站支付宝小程序开发工具
  • 怎么查看vps网站服务器时间中国建设会计协会网站
  • 门户网站上的广告怎么做深圳服装网站建设
  • 公司网站上线的通知抚州营销型网站建设
  • 中国住房城乡和城乡建设部网站小广告文案
  • 做带字头像的网站wordpress 翻页设置
  • 网站横幅js代码公众号如何申请
  • 找网站建设需要问什么软件物联网平台功能
  • 含山县城市建设有限公司网站成都中高风险地区名单最新