Я бегу сервер SocketIO с чем-то вроде:Как транслироваться из запроса, не связанного с SocketIO, для всех подключенных клиентов 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')
Итак, вышеприведенная часть комментария - это то, где у меня проблема.
Что я сделал до сих пор:
- Я нырнул к gevent-socketio code, и видеть, что гнезда хранятся отслеживаются там. Но я не уверен, каким будет следующий шаг.
- Заметил, что в Flask
request.environ
имеет значениеsocketio
, соответствующее объекту. Однако это касается только запросов SocketIO.
Любые подсказки или подсказки были бы очень признательны.
Моя проблема заключается в получении объекта 'server' в запросе, отличном от SocketIO. Я сделал немного уродливого взлома, чтобы сделать это сейчас, используя «глобальный», но должен быть лучший способ. Скоро опубликует исполняемый код, чтобы лучше объяснить мою проблему. Цените свой вклад и время, конечно! –
добавьте ваш сокет-сервер в ваш экземпляр приложения Flask (например, 'app.socketio = server'), а затем укажите его как' current_app.socketio'. – Miguel