
Categoria
Demoção ###


https://im.cookeem.com
Altere no diretório Cookim, execute o comando abaixo, inicie vários nós Servidores Cookim no modo de composição do docker. Dessa forma, começará 3 contêineres: Mongo, Cookim1 e Cookim2
$ git clone https://github.com/cookeem/CookIM.git
$ cd CookIM
$ sudo docker-compose up -d
Creating mongo
Creating cookim1
Creating cookim2Após a execução do Docker compor, use o navegador diferente para acessar os URLs abaixo para conectar -se a Cookim1 e Cookim2
http: // localhost: 8080 http: // localhost: 8081
Categoria
Você pode adicionar configuração no docker-compose.yml (no diretório cookim) para adicionar nós do servidor Cookim, este exemplo mostra como adicionar cookim3 no docker compostos:
cookim3 :
image : cookeem/cookim
container_name : cookim3
hostname : cookim3
environment :
HOST_NAME : cookim3
WEB_PORT : 8080
AKKA_PORT : 2551
SEED_NODES : cookim1:2551
MONGO_URI : mongodb://mongo:27017/local
ports :
- " 8082:8080 "
depends_on :
- mongo
- cookim1Categoria
Visualize contêiner cookim1 logs saída
$ sudo docker logs -f cookim1 Executivo no contêiner cookim1 para depurar
$ sudo docker exec -ti cookim1 bashCategoria
$ sudo docker-compose stop
$ sudo docker-compose rmCategoria
Categoria
git clone https://github.com/cookeem/CookIM.git
cd CookIMCategoria
O arquivo de configuração localiza -se em conf/application.conf , verifique se a configuração do URI do MongoDB.
mongodb {
dbname = " cookim "
uri = " mongodb://mongo:27017/local "
} Montagem Cookim Projeto para um Fatjar, Jar Target Localize em target/scala-2.11/CookIM-assembly-0.2.0-SNAPSHOT.jar
sbt clean assemblyCategoria
Cookim use o MongoDB para armazenar mensagens de bate -papo e dados de usuários, certifique -se de iniciar o MongoDB antes de iniciar o Cookim.
Existem duas maneiras de iniciar o servidor Cookim: SBT e Java
um. SBT Debug Way:
$ cd # CookIM directory#
$ sbt " run-main com.cookeem.chat.CookIM -h localhost -w 8080 -a 2551 -s localhost:2551 "b. Embale e compile Fat Jar:
$ sbt assemblyc. Java Java Caminho:
$ java -classpath " target/scala-2.11/CookIM-assembly-0.2.4-SNAPSHOT.jar " com.cookeem.chat.CookIM -h localhost -w 8080 -a 2551 -s localhost:2551O comando acima tem iniciado um servidor da web, ouvora porta 8080 e akka System, escuta porta 2551
Parâmetros:
-a -h [-m] [-n] -s -w-name host-nomes de serviço atual Nome do host externo -m,-Mongo-uri mongodb conexão com semente de semente de semente: o exemplo: MONGODB: // localhost: 27017/local -N,-Nat Is Neth Networks OR em Ner. vírgula, exemplo: localhost: 2551, localhost: 2552 -w,-porta de serviço da web web port
Categoria
http: // localhost: 8080
Categoria
Abra outro terminal, inicie outro servidor Cookim para testar a comunicação da mensagem entre servidores:
um. SBT Debug Way:
$ sbt " run-main com.cookeem.chat.CookIM -h localhost -w 8081 -a 2552 -s localhost:2551 "b. Java Java Caminho:
$ 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:2551O comando acima tem iniciado um servidor da web, ouvora porta 8081 e akka system, escuta porta 2552
Categoria
http: // localhost: 8081
Categoria

** O servidor cookim ganha de 3 partes: **
- Akka HTTP: Forneça Serviço da Web, navegador Connect Distributed Chat Servers by WebSocket
- Akka Stream: Akka HTTP Receba a mensagem WebSocket (mensagem WebSocket Incluir TextMessage e BinaryMessage) e envie a mensagem para o ChatService by Akka Stream Way, a mensagem WebSocket inclui JWT (Javascript Token), se o JWT verificar a falha, o ChatService Stream retornará a mensagem de rejeição; Se o JWT verificar o sucesso, o ChatService Stream enviará a mensagem para ChatSessionActor
- Akka Cluster: Akka Stream Envie a mensagem Websocket para Akka Cluster ChatSessionActor, ChatSessionActor Use o distributedPubsub para se inscrever e publicar uma mensagem no cluster Akka. Quando o usuário online sessão, ela se inscreverá na sessão; Quando o usuário envia a mensagem em sessão, ele publicará a mensagem no cluster Akka, os atores que se inscrevem na sessão receberão a mensagem de publicação
Categoria

- O órgão da mensagem do webSocket inclui JWT, o fluxo de fluxo usam para receber a mensagem do WebSocket e decodificar JWT;
- Quando o JWT verificar a falha, ele será transmitido para filtrar o Filture para filtrar para falhar a mensagem; Quando o JWT verificar o sucesso, ele será transmitido para o filtro de filtragem para filtrar para a mensagem de sucesso;
- Quando o fluxo de akka criado, o construtor.materializedValue enviará a mensagem para o ConnectgeWS, o ConnectedWS converte a mensagem Receba para a mensagem UserOnline e envie para o ChatSinkactor finalmente envia para o ChatSessionActor;
- ChatactorSink Enviar mensagem para ChatSessionActor, quando o fluxo de Akka fechado se enviar a mensagem UserOffline para o fluxo do Down;
- ChatSource Receba a mensagem de volta do ChatSessionActor e envie a mensagem de volta ao FlowAcceptback;
- O FlowAcceptback permitirá que a conexão WebSocket Keepalive;
- FlowReject e FlowECeptback Mensagens finalmente enviam para o Flowbackws, o Flowbackws converte mensagens para o formato WebSocket e depois enviam de volta aos usuários;
Categoria
*login (login email)
nickname (nickname)
password (password SHA1)
gender (gender: unknow:0, boy:1, girl:2)
avatar (avatar abs path, example: /upload/avatar/201610/26/xxxx.JPG)
lastLogin (last login timestamp)
loginCount (login counts)
sessionsStatus (user joined sessions status)
[{sessionid: session id, newCount: unread message count in this session}]
friends (user's friends list: [friends uid])
dateline (register timestamp)
*createuid (creator uid)
*ouid (receiver uid, when session type is private available)
sessionIcon (session icon, when session type is group available)
sessionType (session type: 0:private, 1:group)
publicType (public type: 0:not public, 1:public)
sessionName (session name)
dateline (created timestamp)
usersStatus (users who joined this session status)
[{uid: uid, online: (true, false)}]
lastMsgid (last message id)
lastUpdate (last update timestamp)
*uid (send user uid)
*sessionid (relative session id)
msgType (message type)
content (message content)
fileInfo (file information)
{
filePath
fileName
fileType
fileSize
fileThumb
}
*dateline (created timestamp)
*uid (online user id)
dateline (last update timestamp)
noticeType (notification type: "joinFriend", "removeFriend", "inviteSession")
senduid (send user id)
*recvuid (receive user id)
sessionid (relative session id)
isRead (notification is read: 0:not read, 1:already read)
dateline (created timestamp)
Categoria
Existem dois canais WebSocket: WS-Push e WS-Chat
WS-Push Enviar sessões novas mensagens para os usuários, quando o usuário não online a sessão, eles ainda podem receber quais sessões têm novas mensagens
/canal ws-push
up message, use to subscribe push message:
{ userToken: "xxx" }
down message:
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" }
fileMsg: { uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "file", fileName: "xxx", fileType: "xxx", fileid: "xxx", thumbid: "xxx", dateline: "xxx" }
onlineMsg: { uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "online", content: "xxx", dateline: "xxx" }
offlineMsg: { uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "offline", content: "xxx", dateline: "xxx" }
joinSessionMsg: { uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "join", content: "xxx", dateline: "xxx" }
leaveSessionMsg:{ uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "leave", content: "xxx", dateline: "xxx" }
noticeMsg: { uid: "", nickname: "", avatar: "", sessionid: "", sessionName: "xxx", sessionIcon: "xxx", msgType: "system", content: "xxx", dateline: "xxx" }
message push to browser:
pushMsg: {
uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "xxx",
content: "xxx", fileName: "xxx", fileType: "xxx", fileid: "xxx", thumbid: "xxx",
dateline: "xxx"
}
Categoria
ws-chat é canal de bate-papo de sessão, envio e recebimento de mensagens de sessão neste canal
/ws-chat channel
up message:
onlineMsg: { userToken: "xxx", sessionToken: "xxx", msgType:"online", content:"" }
textMsg: { userToken: "xxx", sessionToken: "xxx", msgType:"text", content:"xxx" }
fileMsg: { userToken: "xxx", sessionToken: "xxx", msgType:"file", fileName:"xxx", fileSize: 999, fileType: "xxx" }<#BinaryInfo#>binary_file_array_buffer
down message:
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" }
fileMsg: { uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "file", fileName: "xxx", fileType: "xxx", fileid: "xxx", thumbid: "xxx", dateline: "xxx" }
onlineMsg: { uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "online", content: "xxx", dateline: "xxx" }
offlineMsg: { uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "offline", content: "xxx", dateline: "xxx" }
joinSessionMsg:{ uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "join", content: "xxx", dateline: "xxx" }
leaveSessionMsg:{ uid: "xxx", nickname: "xxx", avatar: "xxx", sessionid: "xxx", sessionName: "xxx", sessionIcon: "xxx", msgType: "leave", content: "xxx", dateline: "xxx" }
noticeMsg: { uid: "", nickname: "", avatar: "", sessionid: "", sessionName: "xxx", sessionIcon: "xxx", msgType: "system", content: "xxx", dateline: "xxx" }
message push to browser:
chatMsg: {
uid: "xxx", nickname: "xxx", avatar: "xxx", msgType: "xxx",
content: "xxx", fileName: "xxx", fileType: "xxx", fileid: "xxx", thumbid: "xxx",
dateline: "xxx"
}
Categoria
Categoria
Categoria
Categoria