首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSE DJANGO请求计数

SSE DJANGO请求计数
EN

Stack Overflow用户
提问于 2021-08-01 12:29:15
回答 1查看 234关注 0票数 1

我还是新使用SSE的,在Django版本3.2.5中我有一个关于SSE的问题,我使用StreamingHttpResponse向EventSource客户端发送SSE响应,它确实工作得很好,我的问题是

为什么要很长时间才能打开后端和EventSource?之间的连接

为什么只发送167个响应/32秒?

我试图打开StreamingHttpResponse的代码,但没有发现任何与响应数量有关的东西

在这里的代码

代码语言:javascript
复制
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客户端的代码

代码语言:javascript
复制
    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不会等待并尽可能多地发送请求

也许我误解了什么,但我希望有人能帮我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-01 16:23:54

我能解决这个问题。

它不在代码本身中,但它与was服务器的缓冲区大小有关。

因此,当我按照下面的方式编辑我的代码时,效果很好:

代码语言:javascript
复制
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/字符,我不知道它的字节数是多少),但是是的,它起作用了。

我真的不太了解缓冲区/缓冲区大小/..。但我想这可能是个问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68610430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档