Новое планирование интерфейса HTTP для создания простого проекта чата WebSocket на Java.

Java
Новое планирование интерфейса HTTP для создания простого проекта чата WebSocket на Java.

Эта статья - первый публичный аккаунт и личный блог:Java Cat Talk и блог Uncle Cat | MySelf, пожалуйста, укажите источник для перепечатки.

предисловие

Вы можете увидеть предыдущий:Создание простого чата WebSocket на Java

В предыдущей статье мы реализовали:Разговор с самим собой, чат с друзьями, групповой чат, автономные сообщенияи т.п. функция.

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

У нас будет более полнофункциональный проект чата с меньшим количеством кода!

Принять кадр

Вся наша демонстрация в основном не требует от вас слишком много времени для достижения следующих функций.

  • Проверка входа с токеном пользователя
  • сам чат
  • одноранговый чат
  • Групповой чат
  • Получить список онлайн-пользователей и пользовательских тегов
  • Отправка системных уведомлений

Во-первых, нам нужно представить структуру, которую мы намерены принять сегодня,InChat: облегченная, высокоэффективная асинхронная коммуникационная среда сетевых приложений, поддерживающая многотерминальный (прикладной и аппаратный IoT)., Используя эту структуру, нам в основном нужно всего два или три класса для реализации функций, которые нам нужны сегодня.

Первый взгляд на эффект

demo

log

postman

send

Нужно знать о SSM и SpringBoot?

InChat, сама по себе не зависит от какой-либо базовой платформы, поэтому каждый может реализовать свой собственный чат WebSocket, если он знает базовый язык Java.

Руководство пользователя Framework (только что выпущена новая версия V1.1.2)

Подробные инструкции по эксплуатации вы можете посмотреть во введении на официальном сайте:

<dependency>
    <groupId>com.github.UncleCatMySelf</groupId>
    <artifactId>InChat</artifactId>
    <version>1.1.2</version>
</dependency>

Начать демонстрационную сборку

Создайте пустой проект Maven

Нам не нужно полагаться на другие пакеты Maven, пока достаточно фреймворка, упомянутого в этой статье.

<dependency>
    <groupId>com.github.UncleCatMySelf</groupId>
    <artifactId>InChat</artifactId>
    <version>1.1.2</version>
</dependency>

Параметры запуска InChat можно настроить самостоятельно

Вам просто нужно наследовать класс конфигурации InChat по умолчанию.InitNettyОК, следующим образом

public class MyInit extends InitNetty {
    /** 自定义启动监听端口 */
    @Override
    public int getWebport() {
        return 8090;
    }
}

Получить данные сообщения чата

Этот интерфейс такой же, как и оригинальный, изменено только имя метода.

public class DataBaseServiceImpl implements InChatToDataBaseService {

    @Override
    public Boolean writeMessage(InChatMessage message) {
        System.out.println(message.toString());
        return true;
    }
}

Проверка входа и сообщение в групповом чате

Этот интерфейс не был слишком изменен

public class VerifyServiceImpl implements InChatVerifyService {

    @Override
    public boolean verifyToken(String token) {
        return true;
    }

    @Override
    public JSONArray getArrayByGroupId(String groupId) {
        JSONArray jsonArray = JSONArray.parseArray("[\"1111\",\"2222\",\"3333\"]");
        return jsonArray;
    }
}

Сервер отправляет класс перечисления сообщения уведомления

Этот интерфейс имеет демо-шаблон, пользователям необходимо наследовать структуру InChat.FromServerServiceинтерфейс, а в аннотации интерфейса тоже есть демо-экземпляр, нам нужно реализовать кастомное перечисление, можно написать так:

public enum  FromServerServiceImpl implements FromServerService {

    //你可以自定义自己的系统消息,请以Integer-String的形式
    TYPE1(1,"【系统通知】您的账号存在异常,请注意安全保密信息。"),
    TYPE2(2,"【系统通知】恭喜您连续登录超过5天,奖励5积分。");

    private Integer code;

    private String message;

    FromServerServiceImpl(Integer code, String message){
        this.code = code;
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    //实现接口的方法,遍历本枚举的code,获取对应的消息,作为系统消息发送
    public String findByCode(Object code) {
        Integer codes = (Integer)code;
        for (FromServerServiceImpl item: FromServerServiceImpl.values()) {
            if (item.code == codes){
                return item.message;
            }
        }
        return null;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


}

Стартовый проект

Версия 1.1.2 стартового проекта стала очень простой, нужно только настроить фабрику конфигураций для запуска.

public class application {

    public static void main(String[] args) {
        //配置你的自定义配置
        ConfigFactory.initNetty = new MyInit();
        //配置校验类
        ConfigFactory.inChatVerifyService = new VerifyServiceImpl();
        //配置消息接收处理类
        ConfigFactory.inChatToDataBaseService = new DataBaseServiceImpl();
        //配置服务端系统消息枚举,这里的值无所谓 TYPE1或者TYPE2或者TYPEN均可以
        ConfigFactory.fromServerService = FromServerServiceImpl.TYPE1;
        //启动InChat
        InitServer.open();
    }

}

Эффект проекта

Запущено успешно

DEBUG - -Dio.netty.threadLocalDirectBufferSize: 0
DEBUG - -Dio.netty.maxThreadLocalCharBufferSize: 16384
 INFO - 服务端启动成功【192.168.56.1:8090】

Когда соединение с чатом не зарегистрировано, после автоматического отключения клиента сервис автоматически упакует соответствующее исключение

 INFO - [Handler:channelInactive]/192.168.56.1:8090关闭成功
ERROR - [捕获异常:NotFindLoginChannlException]-[Handler:channelInactive] 关闭未正常注册链接!

оригинальный自我发送,点对点发送,群聊так же, как оригинал

Оригинальное описание интерфейса можно увидеть в предыдущей версии:Инструкция по использованию версии v1.1.0-alpha

new

log

Добавлены новые функции HTTP

Добавлены три новых HTTP-интерфейса.При запуске Inchat запускается по умолчанию и не влияет на другие ваши веб-API.Это вспомогательная функция IM. Эта версия не поддерживает определяемые пользователем связанные HTTP-интерфейсы InChat.

Получить количество онлайн-пользователей

  • адрес:[ip:端口]/get_size GET
  • возвращаемое значение
{
    "code": 200,
    "data": {
        "online": 1,//当前在线数
        "time": "Jan 3, 2019 10:06:45 PM"//查询时间
    }
}

Получить онлайн-идентификатор пользователя

  • адрес:[ip:端口]/get_list GET
  • возвращаемое значение
{
    "code": 200,
    "data": {
        //返回在线用户列表
        "tokens": [ 
            "1111"
        ]
    }
}

Отправка системных сообщений в соответствии с пользовательскими тегами

  • адрес:[ip:端口]/send_from_server POST
  • параметр:token(вы можете начатьget_listчтобы получить тег онлайн-пользователя),value(вы добавляете перечисление в свою системуcodeзначение, строки здесь не принимаются)
  • возвращаемое значение
{
    "code": 400,
    "data": {
        "message": "通知发送成功"
    }
}

(Есть небольшая ошибка, код возвращаемого значения должен быть 200)

send

result

О передней части

InChat: облегченная, высокоэффективная асинхронная коммуникационная среда сетевых приложений, поддерживающая многотерминальный (прикладной и аппаратный IoT)., вы можете перейти непосредственно к этому проекту, чтобы получить главную страницу, или напрямую посетить этот адрес:GitHub.com/uncle cat my S…

Для этой страницы интерфейса нам нужноИзмените свой IP-адрес.

Запустите проект отладки

Затем запустите серверный проект напрямую.Когда мы увидим следующую информацию, проект успешно запущен.

 INFO - 服务端启动成功【192.168.1.121:8090】

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

Затем откройте страницу chat.html прямо в браузере.Для метода js вы можете посмотретьИнструкции по версии InChatV1.1.0.

Эффект бега был показан заранее!

Публичный номер: Java-кот говорит

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

Image Text