<p>我就是这么做的。你知道吗</p>
<p>首先感谢
<a href="https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent" rel="nofollow noreferrer">https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent</a>
感谢你完美的解释。你知道吗</p>
<p>我读了几篇博客学到的东西。你知道吗</p>
<p>所有使用http协议发起的通信都是客户机-服务器通信,客户机始终是发起方。因此,在这种情况下,我们必须使用不同的协议:允许您创建全双工(双向)连接的Web套接字。你知道吗</p>
<p>这是服务器代码</p>
<pre><code>socketio = SocketIO(app, async_mode=async_mode)
thread = None
prevFileName = ""
def background_thread():
prevFileName = ""
while True:
socketio.sleep(0.5)
if(isNewImageFileAdded(prevFileName) == "true"):
prevFileName = getLatestFileName()
socketio.emit('my_response',
{'data': prevFileName, 'count': 0},
namespace='/test');
def getLatestFileName():
return max(glob.iglob('static/*'),key=os.path.getctime)
def isNewImageFileAdded(prevFileName):
latestFileName = max(glob.iglob('static/*'),key=os.path.getctime)
if(prevFileName == latestFileName):
return "false"
else:
return "true"
</code></pre>
<p>创建单独的线程以保持套接字打开。<em>emit</em>将消息从服务器发送到客户端。。。你知道吗</p>
<pre><code>@socketio.on('connect', namespace='/test')
def test_connect():
global thread
if thread is None:
thread = socketio.start_background_task(target=background_thread)
emit('my_response', {'data': 'Connected', 'count': 0})
</code></pre>
<p>这里是客户端</p>
<pre><code>var socket = io.connect(location.protocol + '//' + document.domain + ':' +
location.port + namespace);
socket.on('my_response', function(msg) {
setTimeout(function(){ $("#image").attr("src","/"+msg.data)},1000)
});
</code></pre>
<p>如果我错了,请纠正我。你知道吗</p>