Я хочу отправить сообщение с сервера клиенту. Я посмотрел на это, но не могу использовать, потому что не могу создать экземпляр пространства имен. Как генерировать событие SocketIO на стороне сервера
Мой вариант использования: у меня есть база данных о цене продукта. Многие пользователи в настоящее время просматривают мой сайт. Некоторые из них просматривают товар X. На стороне сервера админ может редактировать цену товара. Если он отредактирует цену X, все клиенты должны увидеть уведомление об изменении цены 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, как в этой ссылке. (Спасибо Кэлвину Ченгу за этот отличный современный пример.)
Я не знаю, как вызвать функцию emit_to_subscribers. Поскольку у меня нет экземпляра пространства имен. Как я прочитал из этого doc ,
Пространства имен создаются только тогда, когда приходят некоторые пакеты, запрашивающие пространство имен.
Но как я могу отправить пакет в это пространство имен из кода? ЕСЛИ я могу создать экземпляр только тогда, когда клиент отправляет сообщение на сервер, когда никто не просматривает сайт, сразу после завершения редактирования цены система выйдет из строя.
Я действительно запутался в пространстве имен и его экземпляре. Если у вас есть более четкие документы, пожалуйста, помогите мне.
Большое спасибо!