class MyServerProtocol(WampServerProtocol):
@exportRpc
def getSubscribers(self):
print "call getSubscribers"
subscriptions = []
for key, value in enumerate(self.factory.subscriptions):
subscriptions.append(value)
return json.dumps(subscriptions)
def onSessionOpen(self):
print "someone has logined"
self.registerForPubSub("http://example.com/event/", True)
self.registerMethodForRpc("http://example.com/event/getSubscribers",
self,
MyServerProtocol.getSubscribers)
def connectionLost(self, reason):
print "someone disconnect", reason
self.factory._unsubscribeClient(self)
self.factory._removeSession(self)
WampProtocol.connectionLost(self, reason)
WebSocketServerProtocol.connectionLost(self, reason)
----------------------------
ab.connect(chat.wsuri,
function (session) {
sess = session;
sess.prefix("event", chat.prefix);
sess.subscribe("event:" + chat.channel, chat.subscribeSuccess); //public topic, subscribe a common topic
sess.subscribe("event:" + chat.username, chat.subscribeSuccess);//privite topic, subscribe myself topic
chat.stateUpdate(true);
},
function (code, reason) {
sess = null;
alert(reason);
chat.stateUpdate(false);
}
)
----------------------------
Q1:我需要一个功能,当客户端断开服务器时,更新订阅者。 我添加了connectionLost方法,但它不起作用。 我打印了param“reason”,我发现这个函数同时删除了public和privite主题。 但我只需要删除私有话题,对吗?但是,怎么做? ----------------------------
Q2:如何广播消息告诉大家,clientX已离开或者clientY已登录? 我不知道如何实现这个功能。
答案 0 :(得分:0)
Q.1 这里的想法是创建一个包含所有连接客户端的数组 怎么样?只需创建注册/取消注册函数,当每个用户连接时,在数组中添加条目,当断开连接时从数组中删除条目。现在通知用户,在注册功能中,在添加此用户之前,调用广播功能(如下所述)并在从该阵列中删除注销用户后取消注册功能,调用广播功能。
Q.2(广播功能):这很简单。由于websockets是单向双向的,因此对于广播,可以在循环遍历数组的位置创建一个函数(如上所述),并在此循环中向每个客户端发送消息。