Как получить IP-адрес клиента в протоколе Autobahn Wamp?

Я использую Autobahn Wamp для подключения к сокету в Python. Я использую механизм PubSub для установления соединения. Соединение установлено успешно.

Но я не могу найти способ вести список подключенных клиентов к серверу.

Пожалуйста, кто-нибудь может предложить способ, с помощью которого я могу вести список IP-адресов подключенных клиентов и способ, которым я могу отправить ответ конкретным клиентам, используя соответствующий адрес?

Пожалуйста, ответьте как можно раньше.

заранее спасибо


person Gaurang    schedule 01.07.2014    source источник
comment
автобан вамп v1 или v2? также, как именно вы устанавливаете соединение? -грамм   -  person Greg    schedule 02.07.2014
comment
версия 0.8.9. Я устанавливаю соединение следующим образом: - если len(sys.argv) › 1 и sys.argv[1] == 'debug': log.startLogging(sys.stdout) debug = True иначе: debug = False log.startLogging( sys.stdout) connectionString=ws://+str(args.host)+:+str(args.port) factory = WampServerFactory(connectionString, debugWamp = True) factory.protocol = MyWampServer factory.setProtocolOptions(allowHixie76 = True) listenWS (заводской) сервер печати запущен в %s % connectionString Reactor.run()   -  person Gaurang    schedule 02.07.2014
comment
его Wamp v1, который я использую   -  person Gaurang    schedule 02.07.2014


Ответы (1)


Это вопрос из двух частей. Первая часть спрашивает, как определить 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
comment
Привет, Грег. Большое спасибо за ваш ответ. У меня возникла проблема с поиском self.peer.host. Плюс я хотел бы знать, какую функцию написать на стороне клиента (html), чтобы получить данные, отправленные с сервера. - person Gaurang; 03.07.2014
comment
Привет. Я решил вопрос относительно пэра. Было бы здорово, если бы вы предоставили мне способ отображения сообщения, отправленного с сервера клиенту на стороне клиента (Html) - person Gaurang; 03.07.2014
comment
Пожалуйста, примите этот ответ, если он ответил на ваши исходные вопросы. Вы можете опубликовать еще один вопрос о html на стороне клиента. -грамм - person Greg; 03.07.2014