我想從服務器發送消息到客戶端。 我看這個,但不能使用,因爲我不能創建一個名稱空間實例。 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,只讀當一些數據包到達時問命名空間
命名空間創建。
但是我怎樣才能從代碼發送數據包到該命名空間?如果我只能在客戶端向服務器發送消息時創建實例,當沒有人正在瀏覽網站時,在完成編輯價格後,系統將會失敗。
我對命名空間及其實例非常困惑。如果你有更清晰的文檔,請幫助我。
非常感謝!
我對此有一個骯髒的解決方法。仍然使用_connections字典來跟蹤當前的連接。然後使用_connections.items()[0] [1] .emit_to_subscribers()。 –