XMPP (Jabber) + Smack


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

Список библиотек для работы нашли на официальном сайте xmpp.org.
После серии небольших испытаний решили для интеграции с серверной частью написанной на Java использовать библиотеку Smack. Не факт, что будем использовать ее в продакшн, пытаемся распробовать. Пока продукт внушает доверие.

1. Подключается к проекту элементарно (т.к. есть maven-овском репозитории):


        
            jivesoftware
            smack
            3.1.0
        
        
            jivesoftware
            smackx
            3.1.0
        

2. Для пробы сразу решили проверить на двух популярных jabber серверах:

  • GTalk. Подключение заработало сразу.

    // Отправляем HelloWorld от "login@hostname" пользователю "recipient@hostname"
    ConnectionConfiguration config = new ConnectionConfiguration("talk.google.com", 5222, "gmail.com");
    XMPPConnection connection = new XMPPConnection(config);
    connection.connect();
    connection.login("login@hostname", "******"); //  свой логин и пароль.
    // 
    Chat chat = connection.getChatManager().createChat("recipient@hostname", new MessageListener() {
        public void processMessage(Chat chat, Message message) {
               System.out.println("Received message: " + message);
         }
    });
    chat.sendMessage("Hello world!");
    
  • jabber.ru. Пришлось немного помучиться.
    Далее привожу пример рабочего кода, для подключения к jabber.ru серверу.

       ConnectionConfiguration config = new ConnectionConfiguration("jabber.ru", 5222, "jabber.ru"); 
       // Внимание! Следующая строчка очень важна!
       SASLAuthentication.supportSASLMechanism("PLAIN");
       XMPPConnection connection = new XMPPConnection(config);
       connection.connect();
       connection.login("login", "*****"); // т.е. не login@jabber.ru, а просто login
       Chat chat = connection.getChatManager().createChat("recipient@jabber.ru", new MessageListener() {
            public void processMessage(Chat chat, Message message) {
                    System.out.println("Received message: " + message);
            }
       });
    
       chat.sendMessage("Hello world");
    

Думаю при интеграции с собственным jabber сервером проблем быть не должно. По возможности, о результатах дальнейших испытаний напишу позже…

,
Любое использование либо копирование материалов или подборки материалов сайта, элементов дизайна и оформления допускается лишь с разрешения правообладателя и только со ссылкой на источник: programador.ru

Телеграм канал: @prgrmdr
Почта для связи: vit [at] programmisty.com