Отладка и запуск сервиса:
$ sbt "run-main com.cookeem.chat.CookIM -h localhost -w 8081 -a 2552 -s localhost:2551"
Запуск сервиса в рабочем режиме:
$ java -classpath "target/scala-2.11/CookIM-assembly-0.2.0-SNAPSHOT.jar" com.cookeem.chat.CookIM -h localhost -w 8081 -a 2552 -s localhost:2551
Эти команды запускают веб-сервис, который слушает порт 8081. Система Akka также слушает порт 2552.
Демонстрация запускает два сервиса CookIM, доступ к которым осуществляется через порты 8080 и 8081 соответственно. Пользователи могут получить доступ к разным сервисам CookIM через разные браузеры. В браузере пользователи отправляют сообщения через WebSocket в кластер Akka, где сообщения распределяются между соответствующими узлами. Это обеспечивает обмен сообщениями между различными сервисами.
Сервис CookIM состоит из трёх частей:
После получения сообщения через WebSocket, Akka HTTP помещает его в поток chatService, где происходит обработка. Поток chatService использует следующие шаги:
Таблица users содержит информацию о пользователях:
Поле | Описание |
---|---|
login | Логин (адрес электронной почты) |
nickname | Никнейм |
password | Пароль (SHA1) |
gender | Пол: 0 — неизвестно, 1 — мужской, 2 — женский |
avatar | Путь к изображению (например, /upload/avatar/201610/26/xxxx.JPG) |
lastLogin | Дата последнего входа (timestamp) |
loginCount | Количество входов |
sessionsStatus | Список состояний связанных сеансов |
friends | Список друзей |
dateline | Дата регистрации (timestamp) |
Таблица sessions содержит информацию о сеансах (групповых или личных чатах):
Поле | Описание |
---|---|
createuid | Идентификатор создателя |
ouid | Идентификатор получателя (только для личных чатов) |
sessionIcon | Значок сеанса (для групповых чатов) |
sessionType | Тип сеанса: 0 — личный чат, 1 — групповой чат |
publicType | Видимость: 0 — только по приглашению, 1 — открыто |
sessionName | Название группы |
dateline | Дата создания (timestamp) |
usersStatus | Массив идентификаторов пользователей, связанных с сеансом |
lastMsgid | Последний отправленный идентификатор сообщения |
lastUpdate | Последнее обновление (timestamp) |
Таблица messages содержит сообщения, отправленные в сеансе:
Поле | Описание |
---|---|
uid | Идентификатор отправителя |
sessionid | Идентификатор сеанса |
msgType | Тип сообщения |
content | Содержание сообщения |
fileInfo | Информация о файле (если есть) |
dateline | Дата отправки (timestamp) |
Таблица onlines содержит информацию об онлайн-пользователях:
Поле | Описание |
---|---|
id | Уникальный идентификатор |
uid | Идентификатор пользователя |
dateline | Время обновления (timestamp) |
Таблица notifications содержит уведомления, отправленные пользователям:
Поле | Описание |
---|---|
noticeType | Тип уведомления («joinFriend», «removeFriend», «inviteSession») |
senduid | Идентификатор отправителя |
recvuid | Идентификатор получателя |
sessionid | Связанный идентификатор сеанса |
isRead | Прочитано (0 — нет, 1 — да) |
dateline | Время обновления (timestamp) |
Существует два канала WebSocket: ws-push и ws-chat.
ws-push отправляет уведомления пользователям, когда они не находятся в сеансе.
/ws-push channel:
Вверх: подписка на push-уведомления: {userToken: «xxx»}.
Вниз: acceptMsg: {uid: «xxx», nickname: «xxx», avatar: «xxx», sessionid: «xxx», sessionName: «xxx», sessionIcon: «xxx», msgType: «accept», content: «xxx», dateline: «xxx»}, rejectMsg: {uid: "", nickname: "", avatar: "", sessionid: "", sessionName: "", sessionIcon: "", msgType: "reject", content: "xxx", dateline: "xxx"}, keepAlive: {uid: "", nickname: "", avatar: "", sessionid: "", sessionName: "", sessionIcon: "", msgType: "keepalive", content: "", dateline: "xxx"} и textMsg: {uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "text", content: "xxx", dateline: "xxx"}.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )