Server sent events SSE Java 11+;客户端示例(不带依赖项)
我正在寻找使用普通JDK11+http客户端读取服务器发送的事件的示例,没有额外的依赖项。我也找不到关于sse的任何信息Server sent events SSE Java 11+;客户端示例(不带依赖项),server-sent-events,java-http-client,Server Sent Events,Java Http Client,我正在寻找使用普通JDK11+http客户端读取服务器发送的事件的示例,没有额外的依赖项。我也找不到关于sse的任何信息 有任何提示吗?编辑1:信息和传入数据的格式 编辑2:更新了代码示例,以处理协议的数据:部分。还有事件:、id:和重试:部分(请参见上面的链接),但我不打算为这些部分添加处理 我找不到一个官方的BodySubscriber来做SSE,但写一个也不难。这里有一个粗略的解释(但请注意TODO): 公共类SSESeSubscriber实现BodySubscriber { 受保护的静态
有任何提示吗?编辑1:信息和传入数据的格式 编辑2:更新了代码示例,以处理协议的
数据:
部分。还有事件:
、id:
和重试:
部分(请参见上面的链接),但我不打算为这些部分添加处理
我找不到一个官方的BodySubscriber
来做SSE,但写一个也不难。这里有一个粗略的解释(但请注意TODO):
公共类SSESeSubscriber实现BodySubscriber
{
受保护的静态最终模式dataLinePattern=Pattern.compile(“^data:?(.*)”;
受保护的静态字符串extractMessageData(字符串[]消息行)
{
var s=新的StringBuilder();
for(变量行:消息行)
{
var m=dataLinePattern.matcher(行);
if(m.matches())
{
s、 追加(m.group(1));
}
}
返回s.toString();
}
受保护的最终使用者基于Java 11的SSE(服务器发送事件)客户端实现,此处:
它提供了处理SSE消息的非常简单的用法
用法示例:
EventHandler eventHandler = eventText -> { process(eventText); };
SSEClient sseClient =
SSEClient sseClient = SSEClient.builder().url(url).eventHandler(eventHandler)
.build();
sseClient.start();
注意:我是这个SSE客户端的作者。谢谢!我会尝试一下,如果遇到任何问题,我会告诉你。