server-sent-events 相关问题

服务器发送事件(SSE)是HTML5规范的一部分。 SSE允许客户端和服务器之间的单向持久连接,使得客户端仅发出单个请求,并且服务器持续不断地将数据推送到客户端,直到连接关闭。


为什么浏览器在显示服务器序列事件时忽略HTML代码

Https://dev.to/philip_zhang_854092d88473/mastering-sent-sent-sent-sse-sse-sse-sse-sse-with-with-with-with-with-with-with-with-with-with-with-with-python-and-go-for-go-for-data8888888888888888888884773年的SSE示例。

回答 1 投票 0



在HTML填充的JavaScript中,为服务器打开Eventsource打破了Chrome的源和DevTool中的网络选项卡吗? 我一直在研究一个新的JavaScript项目,以渲染一堆在Python中收集并流到前端的数据的前端。引起我很多trou的东西...

#!/usr/bin/env python3 from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from threading import Thread import time from urllib.parse import urlparse, parse_qs index = ''' <html> <head> <title>devtools lockup demo</title> </head> <body> <div id='counter'>No data received yet.</div> <script type='text/javascript' defer> /*TODO: this doesn't really need to be a class.*/ class DataRelay { constructor() { const stream_url = '/stream/'; this.event_source = new EventSource(stream_url); this.event_source.onmessage = (event) => { document.getElementById('counter').textContent = event.data; }; this.event_source.onerror = (error) => { console.error('event_source.onerror:', error); }; console.log('data stream handler is set up'); } } let data_relay = new DataRelay(); </script> </body> ''' def encode_as_wire_message(data): # The "data: " preamble, the "\n\n" terminator, and the utf8 encoding are all # mandatory for streams. return bytes('data: ' + data + '\n\n', 'utf8') #TODO: Get this constant in the class class RequestHandler(BaseHTTPRequestHandler): def add_misc_headers(self, content_type): self.send_header('Content-type', content_type) self.send_header('Cache-Control', 'no-cache') self.send_header('Connection', 'keep-alive') self.send_header('Access-Control-Allow-Credentials', 'true') self.send_header('Access-Control-Allow-Origin', '*') def serve_index(self): self.send_response(200) self.add_misc_headers('text/html') self.end_headers() self.wfile.write(bytes(index, 'utf8')) def serve_stream(self): self.send_response(200) self.add_misc_headers('text/event-stream') self.end_headers() print('Beginning to serve stream...') for x in range(1000000): message = encode_as_wire_message(str(x)) print(message) self.wfile.write(message) self.wfile.flush() time.sleep(1.0) def do_GET(self): parsed_url = urlparse(self.path) if parsed_url.path == '/': self.serve_index() elif parsed_url.path == '/stream/': self.serve_stream() def run(server_class=ThreadingHTTPServer, handler_class=RequestHandler): server_address = ('', 8000) # serve on all interfaces, port 8000 httpd = server_class(server_address, handler_class) print('starting httpd... Open a connection to http://localhost:8000') httpd.serve_forever() run()

回答 1 投票 0

我有一个弹簧靴后端,想创建一个SSE端点,示例:

现在,此示例可与HTTP-Call(以及相应的弹簧服务器设置)一起使用。

回答 1 投票 0



在使用Symfony的构建服务器中,如何禁用Buffer_Output? 我最终的目标是创建一个SSE流,但是现在我刚刚在Symfony Project的公共文件夹中创建了一个简单的PHP文件。其中的代码与Symfony无关:

<?php header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); echo "data: 1\n\n"; flush(); sleep(1); echo "data: 2\n\n"; flush(); sleep(1); echo "data: 3\n\n"; flush(); sleep(1); echo "data: 4\n\n"; flush(); sleep(1); 当我打开命令行并运行时php public/sse.php我每秒获得1行,就像我期望/试图实现的那样。 但是,当我运行Symfony的Web服务器(symfony server:start -d)时,然后尝试进行4秒钟的时间,然后一次看到所有输出。似乎Symfony Server仍在缓冲输出,但我不知道为什么。 我尝试了: curl https://127.0.0.1:8000/sse.php返回“ output_buffering => 0 => 0”curl命令带有-Insucure,以防万一它陷入SSL问题 添加第一个回声线 没有它可以。有什么想法吗? 一天后的dedit: 运行Symfony服务器时,我尝试一次将所有内容输出。 (我在日志中看到了传入的请求) 当我直接尝试使用php的php请求并没有缓冲输出时。 运行PHP服务器时,PHP和Curl可以工作。 fulther建议这是Symfony Server的设置/问题 当我将行更改为时,例如,它确实得到了缓冲。 我失去了哈哈 Idk为什么,但是有一个Symfony服务缓冲区的问题 当您使用php服务器尝试脚本时,它将按预期正确工作

回答 0 投票 0

PHP服务器发送的事件过载在循环

现在我遇到了服务器发送的事件。 我设法将数据放在屏幕上,但更新是每3秒钟。 (在线查看后,我似乎创建了一个断开连接,默认的重试时间为3秒)

回答 0 投票 0

httpx

回答 0 投票 0

EventSource 连接中的自定义标头

当我在 JavaScript 中创建一个新的 EventSource 来监听服务器发送的事件时,如下所示: var source = new EventSource("数据/推送"); 有什么方法可以让我指定额外的标题(比如......

回答 3 投票 0

HTMX 和 Go 中的服务器端事件出现问题

我在收到 SSE 后无法让 HTMX 换出 div。 在 Chrome 中,我可以清楚地看到实际收到了该事件。但HTMX似乎并没有对此做出回应。 我缺少什么? 该...

回答 1 投票 0

Laravel Rest api - 调用 SSE 或长轮询会阻止其他 HTTP 请求

我正在开发一个 Laravel + Vue SPA,其中包含用于票务系统(帮助台)的评论模块,旨在实现实时评论。我已经成功实现了带有 while 循环的 SSE。然而,一个

回答 1 投票 0

服务器发送事件 - text/event-stream 有时会被 chrome 和 firefox 误解为 text/html

我构建了一个应用程序,在某些时候,使用服务器发送事件(从长时间运行的 php 脚本发送)来更新前端的进度条。在我遇到了

回答 3 投票 0

Nginx 在 60 秒后超时

我在后端有一个应用程序服务器(Rails with Puma)绑定到unix套接字 这是 nginx 配置的相关部分 地点/现场/ { proxy_pass http://app; # 匹配上游直接的名称...

回答 2 投票 0

如何使用服务器发送事件(SSE)捕获丢失的互联网连接并防止浏览器显示其错误页面?

我正在与 SSE 合作,并意识到如果互联网连接丢失,浏览器总是会转到错误页面。在失去连接的那一刻,它显示“此站点无法响应...

回答 1 投票 0

Spring WebFlux 检测客户端断开连接

假设以下@RestController: @GetMapping(“听”) 公共 Flux 听(){ return Flux.create(sink -> process(sink)); } 还有某处 下一个(新对象()); 这... 假设以下@RestController: @GetMapping("listen") public Flux<Object> listen() { return Flux.create(sink -> process(sink)); } 还有某个地方 sink.next(new Object()); 此代码没有有关接收器状态或完成的信息 尝试使用isCanceled,每次都返回 false。 是否可以检测到FluxSink是否仍在被客户端使用? 在 spring-webflux 中,如果客户端关闭连接,订阅将被取消并处置。 如果在 process 方法中添加回调 onCancel 和 onDispose 你会看到这一点。 private <T> void process(final FluxSink<T> sink) { sink.onCancel(new Disposable() { @Override public void dispose() { System.out.println("Flux Canceled"); } }); sink.onDispose(new Disposable() { @Override public void dispose() { System.out.println("Flux dispose"); } }); } 然后向您的端点发送一个 http 请求,并在 Flux 完成之前取消它。您将看到两个回调都被触发。 接受的答案仅与“服务器发送事件”结合使用,服务器定期向客户端发送事件,当客户端断开连接时订阅将被取消。正如文档所述https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-codecs-streaming 你可以尝试部署到另一台服务器上测试一下,我在本地部署调试的时候也遇到过这个问题。

回答 3 投票 0

以角度实现SSE

我正在尝试在我的测试应用程序中实现SSE。服务器端已设置,我只是使用端点(api/v1/sse/document)。情况是,当我进行扫描时,扫描应该应用...

回答 2 投票 0

SSE 不会使用ignore_user_abort() 和connection_aborted() 断开连接

我从 W3 Schools 获取了一个 SSE 示例,并注意到使用开发工具它不断创建新连接。查看 Kevin Choppin 的博客,我修改了 W3 Schools 示例以使用一段时间(t...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.