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)
———————————————————————————</p>
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);
}
)
全員とチャットする場合は、パブリック トピックに公開します
指定されたクライアントとチャットする場合は、プライベート トピックに公開します
———————————————————————————</p>
Q1: クライアントがサーバーを切断したときにサブスクライバーを更新する機能が必要です。connectionLost メソッドを追加しましたが、機能しません。パラメータ「理由」を出力すると、この関数が公開トピックと非公開トピックを同時に削除することがわかりました。しかし、プライベートトピックを削除する必要があるだけですよね? しかし、これを行う方法は?———————————————————————————</p>
Q2: clientX が退出した、または clientY がログインしたことを全員に通知するメッセージをブロードキャストするにはどうすればよいですか? この機能の実装方法がわかりません。