我正在运行SocketIO服务器,例如:
from socketio.server import SocketIOServer
server = SocketIOServer(
('127.0.0.1', '8000'),
resource='socket.io',
)
server.serve_forever()
然后我有一个命名空间:
class Foo(BaseNamespace, BroadcastMixin):
def on_msg(self, data):
self.emit(data['msg'])
最后,我有一条路线,如:
module = Blueprint('web', __name__)
@module.route('/')
def index():
pkt = dict(
type='event',
name='new_visitor',
endpoint='/foo'
)
## HERE: How do I get the "socket" to look through each connection
#for sessid, socket in blah.socket.server.sockets.iteritems():
# socket.send_packet(pkt)
return render_template('index.html')
所以,上面评论的部分是我遇到问题的地方。
到目前为止我做了什么:
request.environ
具有与该对象对应的socketio
值。但是,这仅限于SocketIO请求。非常感谢任何线索或提示。
答案 0 :(得分:0)
我在Flask-SocketIO扩展上使用的代码是你想做的:
def emit(self, event, *args, **kwargs):
ns_name = kwargs.pop('namespace', '')
for sessid, socket in self.server.sockets.items():
if socket.active_ns.get(ns_name):
socket[ns_name].emit(event, *args, **kwargs)
我的实际实现有点复杂,我简化它只是为了展示如何做你所要求的。如果您想查看完整代码,则扩展程序位于github。