Как создать прокси-сервер jabber / XMPP / службу регистрации?

Я работаю в компании, которая использует Google Chatback (анонимный чат с сотрудником службы поддержки в случае моей компании) в качестве основного поставщика услуг чата. Эта служба использует XMPP (ранее известный как Jabber) протокол для отправки и получения сообщений.

Наша компания имеет десять учетных записей сотрудников службы поддержки, и они доступны через службу чата, которую мы использовали на нашем веб-сайте. Сотрудники используют Mac OSX и Windows, а также разные клиенты в разных ОС. Чат также доступен через собственные приложения как для Android, так и для iOS.

Нам нужна служба для регистрации сеансов чата, и мы изучаем собственные решения, но они не поддерживаются в мобильных платформ, и это в основном решающий фактор.

Я решил ввести еще одно звено в цепочке сообщений, которое регистрирует все сообщения. Идея состоит в том, что сервер отправляет через этот прокси-сервер, который регистрирует сообщения в соответствии с указав, какой это сеанс чата, а затем сохраняет эти журналы соответствующим образом. В настоящее время они хранят все журналы в папке Dropbox, что может привести к ошибкам.

Теоретически это позволит нашим сторонникам использовать любую ОС / клиент, которые они выберут, и журналы окажутся в том же месте .

Проведя несколько тестов с использованием Smack API, я пришел к выводу, что мой клиент XMPP (Trillian как на Android, так и на Windows) отвечает на ресурс, от которого он в последний раз получил сообщение. Фактически это означает, что реализованный мною очень простой регистратор чата просто игнорируется.

Тест проводился с использованием приведенного ниже кода в сочетании с другим клиентом, который работает параллельно. Только один из клиентов получает сообщение.

ConnectionConfiguration config = new ConnectionConfiguration("talk.google.com", 5222, "googlemail.com");
config.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
config.setSASLAuthenticationEnabled(true);
XMPPConnection connection = new XMPPConnection(config);
connection.connect();

Presence presence = new Presence(Presence.Type.unavailable);
connection.login("android_client_username", "android_client_pass");
Message message = new Message("my_test_email@gmail.com");
message.setBody("Hello World!");
connection.sendPacket(message);
connection.sendPacket(presence);
connection.addPacketListener(new PacketListener() {
          public void processPacket(Packet packet) {
             if (packet instanceof Message) {
                Message message = (Message) packet;
                System.out.println(message.getBody()); 
             }
           }
        }, new MessageTypeFilter(Message.Type.chat));
  • Можно ли создать такой прокси-сервер с помощью службы Google Talk, т.е. без размещения нашего собственного сервера XMPP?
  • Можно ли вообще прослушивать все пакеты на сервере удаленно?
  • Если нет, то какие существуют альтернативы для анонимных клиентов веб-чата, которые используют открытый протокол, такой как XMPP?

Спасибо за ваше время.

5
задан Jes 22 June 2011 в 10:26
поделиться