我想从服务器向客户端发送消息。我看过这个但不能使用,因为我无法创建命名空间实例。 如何在服务器端发出 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 。(感谢 Calvin Cheng 提供的这个出色的最新示例。)
我不知道如何调用 emit_to_subscribers。因为我没有命名空间的实例。正如我从这个文档中读到的,
只有当一些请求命名空间的数据包到达时,才会创建命名空间。
但是如何从代码中将数据包发送到该名称空间?如果我只能在客户端向服务器发送消息时创建实例,当没有人浏览网站时,在完成价格编辑后,系统将失败。
我对命名空间及其实例感到非常困惑。如果您有更清晰的文档,请帮助我。
非常感谢!