【问题标题】:SSE DJANGO REQUEST COUNTSSE DJANGO 请求数
【发布时间】:2021-10-07 03:33:21
【问题描述】:

我仍然是使用 SSE 的新手,我对 Django 版本 3.2.5 中的 SSE 有疑问,我正在使用 StreamingHttpResponse 将 SSE 响应发送到 EventSource 客户端,它工作正常, 我的问题

为什么打开后端和 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')

我使用 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)
}

注意:当我删除白色时:True EventSource 不会等待并尽可能发送请求

也许我在这里误解了一些东西,但我希望有人能帮助我

【问题讨论】:

  • .2 不是 2 毫秒,而是 200 毫秒或 1/5 秒。还是不多解释,只是想说明一下
  • @AlexandrTatarinov,感谢您的解释。我还在想办法,但是还是不行

标签: django server-sent-events eventsource event-stream streaminghttpresponse


【解决方案1】:

我可以解决这个问题。

不是代码本身,而是和webserver的缓冲区大小有关

所以当我将代码编辑为如下所示时,它工作正常:

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/字符 我不知道这可能是多少字节),但它确实有效)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2016-10-17
    • 2014-06-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多