gpt4 book ai didi

Python Bottle SSE

转载 作者:行者123 更新时间:2023-12-01 04:41:53 27 4
gpt4 key购买 nike

我正在尝试让服务器发送事件在Python中工作,所以我找到了一些演示代码,令我惊讶的是,它只部分工作,我不明白为什么。我从here获取代码并进行了一些小的更改,这样我就可以看到什么在起作用(我包括了一个 print 语句,一个他们显然忘记的 import 语句,并将他们的 HTML 清理为我可以更容易阅读的内容)。现在看起来像这样:

# Bottle requires gevent.monkey.patch_all() even if you don't like it.
from gevent import monkey; monkey.patch_all()
from gevent import sleep

from bottle import get, post, request, response
from bottle import GeventServer, run
import time


sse_test_page = """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js "></script>
<script>
var es = new EventSource("/stream");
es.onmessage = function(e) {
document.getElementById("log").innerHTML = e.data;
}
</script>
</head>
<body>
<h1>Server Sent Events Demo</h1>
<p id="log">Response Area</p>
</body>
</html>
"""


@get('/')
def index():
return sse_test_page


@get('/stream')
def stream():
# "Using server-sent events"
# https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
# "Stream updates with server-sent events"
# http://www.html5rocks.com/en/tutorials/eventsource/basics/

response.content_type = 'text/event-stream'
response.cache_control = 'no-cache'

# Set client-side auto-reconnect timeout, ms.
yield 'retry: 100\n\n'

n = 1

# Keep connection alive no more then... (s)
end = time.time() + 60
while time.time() < end:
yield 'data: %i\n\n' % n
print n
n += 1
sleep(1)


if __name__ == '__main__':
run(server=GeventServer, port = 21000)

所以最终发生的事情是这样的:我可以在网站上看到原始标题和段落,但响应区域永远不会改变。在 python 方面,它每秒打印一次 n ,但我从未在网页上看到这种变化。我觉得我只是对自己想做的事情缺乏基本的了解,但我找不到任何遗漏的东西。

我正在运行 Python 2.7、Windows 7、Chrome 43.0.2357.81 m。

编辑:我去掉了多余的引号。现在似乎只有在达到 60 时才会更新(我想这总比不更新要好……)为什么要等到函数结束才发送事件?

最佳答案

p id="log""之后有 2 组引号

关于Python Bottle SSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com