SSE Django 请求计数
SSE DJANGO REQUEST COUNT
我仍然是 SSE 的新手,我对 Django 版本 3.2.5 中的 SSE 有疑问,我正在使用 StreamingHttpResponse 将 SSE 响应发送到 EventSource 客户端,它工作正常,
我的问题是
为什么打开后端和EventSource之间的连接需要很长时间?
为什么只发送了 167 responses/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')
我正在使用 sleep() 每次迭代只等待 200/毫秒。
但是每当发送 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 时不会等待并尽可能多地发送请求
可能我理解有误,但我希望有人能帮助我
我可以解决问题。
代码本身没有,但是跟webserver的buffer size有关
所以当我将我的代码编辑为如下所示时,它工作正常:
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/字符
我不知道它有多少字节),但是是的,它有效 Alhumdulliah)
我真的不太了解buffer/buffer-size/..
但我认为这可能是问题所在
我仍然是 SSE 的新手,我对 Django 版本 3.2.5 中的 SSE 有疑问,我正在使用 StreamingHttpResponse 将 SSE 响应发送到 EventSource 客户端,它工作正常, 我的问题是
为什么打开后端和EventSource之间的连接需要很长时间?
为什么只发送了 167 responses/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')
我正在使用 sleep() 每次迭代只等待 200/毫秒。 但是每当发送 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 时不会等待并尽可能多地发送请求
可能我理解有误,但我希望有人能帮助我
我可以解决问题。
代码本身没有,但是跟webserver的buffer size有关
所以当我将我的代码编辑为如下所示时,它工作正常:
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/字符 我不知道它有多少字节),但是是的,它有效 Alhumdulliah)
我真的不太了解buffer/buffer-size/.. 但我认为这可能是问题所在