Python瓶子和gevent服务器是否异步运行?
我最近一直在开发一个带有歌曲请求功能的网络控制扬声器,我似乎无法同时将两个浏览器连接到网络套接字。服务器仍将为浏览器提供HTML,但不提供Web套接字提供的数据。我知道我可能需要使用gevent的内置Greenlet,但我不知道这是否适用于这里,或者我是否需要重新思考我对无限循环的想法。有人能帮忙吗 gevent测试的内容。py:Python瓶子和gevent服务器是否异步运行?,python,asynchronous,websocket,bottle,gevent,Python,Asynchronous,Websocket,Bottle,Gevent,我最近一直在开发一个带有歌曲请求功能的网络控制扬声器,我似乎无法同时将两个浏览器连接到网络套接字。服务器仍将为浏览器提供HTML,但不提供Web套接字提供的数据。我知道我可能需要使用gevent的内置Greenlet,但我不知道这是否适用于这里,或者我是否需要重新思考我对无限循环的想法。有人能帮忙吗 gevent测试的内容。py: from bottle import request, Bottle, abort, static_file app = Bottle() open("playli
from bottle import request, Bottle, abort, static_file
app = Bottle()
open("playlist2.txt").close()
@app.route('/websocket')
def handle_websocket():
wsock = request.environ.get('wsgi.websocket')
if not wsock:
abort(400, 'Expected WebSocket request.')
while True:
try:
playlist = open("playlist2.txt", "r").readlines()
playlistnew = open("playlist.txt", "r").readlines()
except FileNotFoundError:
pass
except PermissionError:
pass
if playlist != playlistnew:
try:
playlist = open("playlist2.txt", "w")
playlist.writelines(playlistnew)
playlist.close()
except FileNotFoundError:
pass
try:
message = open("playlist2.txt", "r").read()
print(message)
wsock.send(message)
except WebSocketError:
break
@app.get('/home')
def homepage():
return static_file("index.html", root=".")
from gevent.pywsgi import WSGIServer
from geventwebsocket import WebSocketError
from geventwebsocket.handler import WebSocketHandler
server = WSGIServer(("127.0.0.1", 8080), app,
handler_class=WebSocketHandler)
server.serve_forever()
<!DOCTYPE html>
<html>
<head>
<h1>Now playing:</h1>
<p id="now-playing"></p>
<h1>Up Next:</h1>
<table>
<thead>
<tr>
<th>No.</th>
<th>Song Title</th>
</tr>
</thead>
<tbody id="playlist">
</tbody>
</table>
<script type="text/javascript">
var ws = new WebSocket("ws://127.0.0.1:8080/websocket");
ws.onopen = function() {};
ws.onmessage = function (evt) {
var file = (evt.data).split("\n");
console.log(file);
var table = document.getElementById("playlist");
table.innerHTML = '';
document.getElementById("now-playing").innerHTML = file[0]
for(var i=1, len=file.length; i < len; i++){
var number = (i);
var name = (file[i]);
console.log(file[i])
console.log(i)
var newrow = table.insertRow(-1);
var numberCell = newrow.insertCell(0);
numberCell.innerHTML = number
var nameCell = newrow.insertCell(1);
nameCell.innerHTML = name
};
};
</script>
</head>
</html>
index.html的内容:
from bottle import request, Bottle, abort, static_file
app = Bottle()
open("playlist2.txt").close()
@app.route('/websocket')
def handle_websocket():
wsock = request.environ.get('wsgi.websocket')
if not wsock:
abort(400, 'Expected WebSocket request.')
while True:
try:
playlist = open("playlist2.txt", "r").readlines()
playlistnew = open("playlist.txt", "r").readlines()
except FileNotFoundError:
pass
except PermissionError:
pass
if playlist != playlistnew:
try:
playlist = open("playlist2.txt", "w")
playlist.writelines(playlistnew)
playlist.close()
except FileNotFoundError:
pass
try:
message = open("playlist2.txt", "r").read()
print(message)
wsock.send(message)
except WebSocketError:
break
@app.get('/home')
def homepage():
return static_file("index.html", root=".")
from gevent.pywsgi import WSGIServer
from geventwebsocket import WebSocketError
from geventwebsocket.handler import WebSocketHandler
server = WSGIServer(("127.0.0.1", 8080), app,
handler_class=WebSocketHandler)
server.serve_forever()
<!DOCTYPE html>
<html>
<head>
<h1>Now playing:</h1>
<p id="now-playing"></p>
<h1>Up Next:</h1>
<table>
<thead>
<tr>
<th>No.</th>
<th>Song Title</th>
</tr>
</thead>
<tbody id="playlist">
</tbody>
</table>
<script type="text/javascript">
var ws = new WebSocket("ws://127.0.0.1:8080/websocket");
ws.onopen = function() {};
ws.onmessage = function (evt) {
var file = (evt.data).split("\n");
console.log(file);
var table = document.getElementById("playlist");
table.innerHTML = '';
document.getElementById("now-playing").innerHTML = file[0]
for(var i=1, len=file.length; i < len; i++){
var number = (i);
var name = (file[i]);
console.log(file[i])
console.log(i)
var newrow = table.insertRow(-1);
var numberCell = newrow.insertCell(0);
numberCell.innerHTML = number
var nameCell = newrow.insertCell(1);
nameCell.innerHTML = name
};
};
</script>
</head>
</html>
现在播放:
下一步:
不
歌曲名称
var ws=newwebsocket(“ws://127.0.0.1:8080/WebSocket”);
ws.onopen=function(){};
ws.onmessage=函数(evt){
var file=(evt.data).split(“\n”);
console.log(文件);
var table=document.getElementById(“播放列表”);
table.innerHTML='';
document.getElementById(“正在播放”).innerHTML=文件[0]
for(var i=1,len=file.length;i
playlist.txt和playlist2.txt可以包含您想要的任何内容,但web套接字仅在您编辑和保存playlist.txt时提供数据。然后,它编辑playlay2.txt以匹配,然后获取新数据并发送