Объяснение:
Эта версия с открытым исходным кодом является базовой версией с функциональностью только для отправки сообщений!
Введение:
В настоящее время на рынке существует множество систем мгновенного обмена сообщениями (IM) на основе протокола XMPP, таких как Openfire AndroidPN и т. д. Все они используют Apache Mina для разработки, но эти системы обычно требуют вторичной модификации и разработки. Более того, изменения всё ещё велики, я также просмотрел исходный код этих вещей и обнаружил, что структура кода не очень хороша, а ситуация с зависимостями слишком велика, и действительно трудно расширить. Так называемый протокол XMPP — это просто кто-то, кто использовал Mina для создания собственного протокола кодирования и декодирования сообщений. Проще говоря, это кодирование и декодирование сообщений в формате XML. Нам совершенно не нужно тратить слишком много усилий на изучение и исследование незрелых openfire и XMPP за границей. Мы можем полностью использовать Apache Mina для настройки нашего собственного коммуникационного протокола и дать ему собственное имя. Не нужно слепо поклоняться некоторым вещам за границей, важно понимать принципы, помните об этом, друзья!
Этот набор систем IM был разработан мной лично с использованием Apache Mina. Основные функции включают серверную часть и клиентскую часть, клиент-клиентский обмен мгновенными сообщениями, который может поддерживать любые типы сообщений, такие как текст, изображения, аудио и т.д. Серверная часть использует Struts2+spring3 и Apache Mina, а клиентская часть Android также использует Apache Mina. Эта структура системы IM по-прежнему очень чёткая и разумная, её легко расширять и модифицировать. Ниже приводится демонстрация версии Android, цель которой — просто показать, как она работает. Вы можете обратиться к её коду, использовать эту систему для разработки своих собственных вещей. Основная ценность заключается в высокогибком и относительно стандартизированном решении для обмена мгновенными сообщениями. Мгновенный чат — это всего лишь один из способов его использования!
Конфигурация кластера серверной части:
Модификация сервера:
Для конфигурации кластера серверов сначала необходимо переписать интерфейс SessionManager (см. com.farsunset.ichat.cim.session.ClusterSessionManager.java). При входе пользователя сохраните информацию о счёте и IP-адрес сервера в базе данных, чтобы можно было подсчитать количество подключений, принятых каждым сервером.
Когда клиент подключается к серверу, сервер динамически назначает IP-адрес клиента, выбирая наименее загруженный IP-адрес.
После получения сообщения сервер находит соответствующий Iosession через получателя счёта и IP-адрес входа в систему, а затем передаёт сообщение целевому серверу для обработки и отправки.
Клиентская модификация:
Успешный случай:
HTTP://blog.csdn.net/xx753277/article/details/17512255
HTTP://blog.csdn.net/xx753277/article/details/45535981
Получение сообщений клиентом:
Рисунок: http://staticres.oss-cn-hangzhou.aliyuncs.com/cim-android_client.png
Вход в веб-службу сообщений:
http://192.168.1.11:8080/ichat-server
Рисунок: http://staticres.oss-cn-hangzhou.aliyuncs.com/cim-server.png
Общие функциональные интерфейсы:
Все открытые внешние интерфейсы сосредоточены в com.farsunset.cim.client.android.CIMPushManager:
1.1 Подключение к серверу:
/**
* Инициализация, подключение к серверу. В программе запуска или в Application вызовите
* @param context
* @param ip
* @param port
*/
public static void connect(Context context,String ip,int port)
Пример:
CIMPushManager.connect(context,"125.12.35.231",28888);
1.2 Привязка учётной записи к серверу
/**
* Настройка учётной записи для входа на сервер
* @param account уникальный идентификатор пользователя
*/
public static void bindAccount(Context context,String account)
Пример:
CIMPushManager.bindAccount(context,"xiyang");
1.3 Отправка запроса CIM
Используйте этот функционал по мере необходимости, вы можете заменить его на http-интерфейс
/**
* Отправить запрос CIM
* @param context
* @param ip
* @param порт
*/
public static void sendRequest(Context context,SentBody body)
Пример: получение офлайн-сообщений
SentBody sent = new SentBody();
sent.setKey(CIMConstant.RequestKey.CLIENT_OFFLINE_MESSAGE);
sent.put("account", "xiyang");
CIMPushManager.sendRequest(context, sent);
Для этого требуется реализация на стороне сервера. Подробности см. в Server PullOflineMessageHandler.java.
1.4 Прекратить приём сообщений
/**
* Прекратить приём уведомлений, выйти из текущей учётной записи и закрыть соединение с сервером
* @param контекст
*/
public static void stop(Context context)
Пример:
CIMPushManager.stop(контекст);
1.5 Возобновить приём сообщений
/**
* Возобновление приёма уведомлений, повторное подключение к серверу и вход в текущую учётную запись
* @параметр контекста
*/
public static void resume(Context context)
Пример:
CIMPushManager.resume(контекст);
1.6 Полностью уничтожить соединение
/**
* Полностью уничтожьте CIM, обычно используется для полного выхода из программы, вызов resume не может быть восстановлен
* @параметр контекста
*/
public static void destroy(Context context)
Пример:
CIMPushManager.destroy(контекст);
1.7 Проверьте, нормально ли соединение с сервером
/**
*
* @параметр контекста
*/
public boolean isConnected(Context context)
Пример:
CIMPushManager.isConnected(контекст);
1.8 Получить состояние PushManager
//Уничтожить destroy()
CIMPushManager.STATE_DESTROYED = 0x0000DE;
//Остановленный stop()
CIMPushManager.STATE_STOPED = 0x0000EE;
CIMPushManager.STATE_NORMAL = 0x000000;
public int getState(Context context)
Пример:
CIMPushManager.getState(контекст);
1.9 Получение сообщений и связанных событий
Сначала зарегистрируйте широковещательную рассылку и прослушайте следующие действия. Обратитесь к androidManifest.xml для последующей настройки.
См. реализацию CustomCIMMessageReceiver.
/**
* Обработка полученных сообщений с сервера
* @сообщение
*/
public abstract void onMessageReceived(Message message);
/**
* Когда CIMPushManager.sendRequest() отправляет запрос на сервер и получает ответ, вызывается
* @replybody
*/
public abstract void onReplyReceived(ReplyBody replybody);
/**
* Вызывается при изменении состояния сети мобильного телефона
* @networkinfo
*/
public abstract void onNetworkChanged(NetworkInfo networkinfo);
/**
* Обратный вызов после успешного подключения к серверу
* @hasAutoBind : true автоматически привязал учётную запись к серверу, не нужно вручную вызывать bindAccount
*/ ```
public abstract void onConnectionClosed();
/**
* Когда сервер не удалось подключить, происходит обратный вызов
*/
public abstract void onConnectionFailed(Exception e);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )