我还是新使用SSE的,在Django版本3.2.5中我有一个关于SSE的问题,我使用StreamingHttpResponse向EventSource客户端发送SSE响应,它确实工作得很好,我的问题是
为什么要很长时间才能打开后端和EventSource?之间的连接
为什么只发送167个响应/32秒?
我试图打开StreamingHttpResponse的代码,但没有发现任何与响应数量有关的东西
在这里的代码
def sse_movies(request):
def event_stream():
while True:
sleep(.2)
yield f"data: {datetime.time(datetime.now())}\n\n"
return StreamingHttpResponse(event_stream(), content_type='text/event-stream')在每次迭代中,我只需等待200/毫秒,就会使用for ()。但是,每当发送EventSource时,它都会等待几乎32 /秒来启动与后端的连接,并且在发送167个请求之后等待2秒,然后再发送另一个167个请求,在发送第二个167个请求之后,再等待32秒。
以下是EventSource客户端的代码
let url = '/test/' +'sse/movies/'
let sse_client = new EventSource(url)
let movies = document.querySelector('#data-movies')
let movies_list = document.querySelector('#messages')
sse_client.onopen = function(message_event) {
console.log('opened')
}
console.log(sse_client)
sse_client.onmessage = (message_event) => {
console.log(message_event.data)
console.log(sse_client.readyState)
}注意:当我删除white时: True EventSource不会等待并尽可能多地发送请求
也许我误解了什么,但我希望有人能帮我
发布于 2021-08-01 16:23:54
我能解决这个问题。
它不在代码本身中,但它与was服务器的缓冲区大小有关。
因此,当我按照下面的方式编辑我的代码时,效果很好:
def sse_movies(request):
def event_stream():
body = ''.join([letter * 6000 for letter in 'A'])
body_len = len(body)
print(body_len)
while True:
sleep(2)
yield f"data: {body}\n\n"
return StreamingHttpResponse(event_stream(), content_type='text/event-stream')正如您在上面看到的,缓冲区的最小大小是6000/字符,我不知道它的字节数是多少),但是是的,它起作用了。
我真的不太了解缓冲区/缓冲区大小/..。但我想这可能是个问题
https://stackoverflow.com/questions/68610430
复制相似问题