伙计们
我正在使用带有Load Balancer的AWS Elastic beantalk上的JAVA Spring构建网站。简而言之,我有一个页面,该页面使用客户端的事件源和Java Spring后端的SseEmitter从服务器接收服务器端事件(SSE)。
我希望我的网站可以使用HTTPS,所以我遵循官方的建议来设置NGINX配置: https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/?nc1=f_ls
它运作良好...当我使用HTTP连接到我的网站时,它会自动重定向到HTTPS。
但是,我的服务器端事件停止了工作。
我尝试了另一篇文章中的解决方案: EventSource / Server-Sent Events through Nginx 但这没有帮助。
在服务器端,我还根据其他建议添加了httpHeaders。
服务器端:
public static final class CustomSseEmitter extends SseEmitter {
static final MediaType UTF8_TEXT_EVENTSTREAM = new MediaType("text", "event-stream", Charset.forName("UTF-8"));
@Override
protected void extendResponse(ServerHttpResponse outputMessage) {
HttpHeaders headers = outputMessage.getHeaders();
headers.set("X-Accel-Buffering", "no");
headers.set("Cache-Control", "no-cache");
headers.set("Connection", "keep-alive");
headers.set("Content-Type", "text/event-stream");
if (headers.getContentType() == null) {
headers.setContentType(UTF8_TEXT_EVENTSTREAM);
}
}
}
客户端:
var registerSSE = function (companyId, retryCount) {
source = new EventSource("/middle/registerSSE/" + companyId);
source.onopen = function (e) {
console.log("Build SSE successful");
};
source.onmessage = function (e) {
console.log("receive SSE");
};
source.onerror = function (e) {
console.error("SSE broken [" + e.data + "], retry " + (
++retryCount) + " times!");
}
}
抱歉,在这种情况下,我还是一个新手,如何将两个必需的功能组合在一起?
任何建议将不胜感激。 谢谢。