Python 有人有gevent socketio的工作示例吗?
bitbucket和github中gevent socketio的所有分支都有不起作用的示例/chat.py。 有人能给我找一个gevent socketio的工作示例吗?我在WebSocket上制作。 这是草案代码,但它的工作Python 有人有gevent socketio的工作示例吗?,python,websocket,socket.io,gevent,Python,Websocket,Socket.io,Gevent,bitbucket和github中gevent socketio的所有分支都有不起作用的示例/chat.py。 有人能给我找一个gevent socketio的工作示例吗?我在WebSocket上制作。 这是草案代码,但它的工作 import os from gevent.pywsgi import WSGIServer import geventwebsocket class eServer(object): def __init__(self): path = o
import os
from gevent.pywsgi import WSGIServer
import geventwebsocket
class eServer(object):
def __init__(self):
path = os.path.dirname(geventwebsocket.__file__)
agent = "gevent-websocket/%s" % (geventwebsocket.__version__)
print "Running %s from %s" % (agent, path)
self.all_socks = []
self.s = WSGIServer(("", 8000), self.echo, handler_class=geventwebsocket.WebSocketHandler)
self.broken_socks = []
self.s.serve_forever()
def echo(self, environ, start_response):
websocket = environ.get("wsgi.websocket")
if websocket is None:
return http_handler(environ, start_response)
try:
while True:
message = websocket.receive()
if message is None:
break
self.sock_track(websocket)
for s in self.all_socks:
try:
s.send(message)
except Exception:
print "broken sock"
self.broken_socks.append(s)
continue
if self.broken_socks:
for s in self.broken_socks:
print 'try close socket'
s.close()
if s in self.all_socks:
print 'try remove socket'
self.all_socks.remove(s)
self.broken_sock = []
print self.broken_sock
websocket.close()
except geventwebsocket.WebSocketError, ex:
print "%s: %s" % (ex.__class__.__name__, ex)
def http_handler(self, environ, start_response):
if environ["PATH_INFO"].strip("/") == "version":
start_response("200 OK", [])
return [agent]
else:
start_response("400 Bad Request", [])
return ["WebSocket connection is expected here."]
def sock_track(self, s):
if s not in self.all_socks:
self.all_socks.append(s)
print self.all_socks
s = eServer()
和客户端的html类似:
<html>
<head>
<script type="text/javascript" src="http://yandex.st/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var socket = new WebSocket("ws://localhost:8000");
socket.onopen = function(){
console.log('socket open');
}
socket.onmessage = function(msg){
console.log(msg);
$('#recive').after('<p>'+msg.data+'</p>');
}
$('#send-btn').click(function(){
var txt = $('#txt').val();
console.log(txt);
socket.send(txt);
})
});
</script>
</head>
<body>
<textarea id="txt"></textarea>
<input type="button" id="send-btn" value="Send"></input>
<div id="recive"></div>
</body>
</html>
$(函数(){
var socket=newwebsocket(“ws://localhost:8000”);
socket.onopen=函数(){
log(“套接字打开”);
}
socket.onmessage=函数(msg){
控制台日志(msg);
$('#recive')。在(''+msg.data+'')之后;
}
$(“#发送btn”)。单击(函数(){
var txt=$('#txt').val();
console.log(txt);
socket.send(txt);
})
});
使用新的官方存储库:
python chat.py也会运行。但在浏览器中,键入昵称并点击“回车”后,聊天窗口不会出现。相反,昵称输入的“行为”就好像它没有提交表单一样。在gevent socketio的一些分支中,msg只出现在self的聊天窗口中,而不出现在其他用户中。我使用了Opera、Mozilla、Chrome和Safari。