Я хочу передать сообщение от сервера к клиенту. Я смотрю на это, но не могу использовать, потому что я не могу создать экземпляр пространства имен. How to emit SocketIO event on the serversideКак отправить уведомление с сервера (django) клиенту (socketio)?
Мой бланк использования: У меня есть база данных о цене продукта. В настоящее время многие пользователи просматривают мой сайт. Некоторые из них просматривают продукт X. На стороне сервера администратор может отредактировать цену продукта. Если он отредактирует цену X, все клиенты должны увидеть уведомление об изменении цены X (e.x: простое предупреждение js).
Мой клиент Javascript Сейчас:
var socket = io.connect('/product');
#notify server that this client is viewing product X
socket.emit("join", current_product.id);
#upon receive msg from server
socket.on('notification', function (data) {
alert("Price change");
});
Мой код сервера (socket.py):
@namespace('/products')
class ProductsNamespace(BaseNamespace, ProductSubscriberMixin):
def initialize(self, *args, **kwargs):
_connections[id(self)] = self
super(ProductsNamespace, self).initialize(*args, **kwargs)
def disconnect(self, *args, **kwargs):
del _connections[id(self)]
super(ProductsNamespace, self).disconnect(*args, **kwargs)
def on_join(self, *args):
print "joining"
def emit_to_subscribers(self): pass
Я использую runserver_socketio.py как в этом link. (Спасибо Calvin Cheng за этот отличный современный пример.)
Я не знаю, как вызвать emit_to_subscribers. Поскольку у меня нет экземпляра пространства имен. Как я прочитал из этого doc,
Namespaces создается только тогда, когда некоторые пакеты прибывают, которые просят имена.
Но как я могу отправить пакет в это пространство имен из кода? ЕСЛИ я могу создать экземпляр, когда клиент выдает сообщение на сервер, когда никто не занимается серфингом на сайте, сразу после завершения редактирования цены система не удастся.
Я действительно смущен пространством имен и его экземпляром. Если у вас есть более четкие документы, пожалуйста, помогите мне.
Большое спасибо!
У меня есть грязное обходное решение для этого. Все еще используйте словарь _connections, чтобы отслеживать текущее соединение. Затем используйте _connections.items() [0] [1] .emit_to_subscribers(). –