Это вопрос из двух частей. Первая часть спрашивает, как определить IP-адрес для подключенных веб-сокетов. Вторая часть спрашивает, как направить сообщение в конкретный сеанс. Начну со второй части. В комментарии выше есть фабричная переменная. Его можно использовать везде, где он находится в такой области:
factory.dispatch("http://domain.com/topic", "payload", [ excluded sessions ], [ included sessions])
Идентификатор сеанса выглядит следующим образом: TB15LhO8oS0MLsj6 и доступен для методов протокола, таких как onSessionOpen, onClose, в переменной self.session_id. Я делаю что-то вроде этого:
ses_var = {}
Поместите это в начало вашего кода, глобальную переменную. Затем в onSessionOpen():
def onSessionOpen(self):
global ses_var
ses_var[self.session_id] = self
print "connection from ", self.peer.host, self.peer.port
Этот код дает вам дескриптор сеанса. Вам нужно будет управлять этой переменной и удалить сеанс из переменной в методе onClose().
Итак, если вы зафиксировали все открытые сеансы в переменной ses_var, вы можете публиковать сообщения для любого (и всех) из них, используя диспетчеризацию, опять же:
factory.dispatch("http://domain.com/topic", "payload", [],
factory.sessionIdsToProtos(ses_var.keys()))
Обратите внимание, что session_id НЕ является ожидаемым аргументом, вы должны преобразовать идентификатор в фактический объект сеанса.
Два массива в factory.dispatch определяют, кому не отправлять сообщение и кому отправлять сообщение. Если вы передадите None в качестве второго массива, вы отправите сообщение всем клиентам, поэтому диспетчеризация для примера может быть переписана так:
factory.dispatch("http://domain.com/topic", "payload", [], None)
Если вы хотите отправить его в первый сеанс (например), вы можете сделать:
factory.dispatch("http://domain.com/topic", "payload", [],
factory.sessionIdsToProtos([ses_var[0].session_id]))
person
Greg
schedule
02.07.2014