goch é um servidor de chat ao vivo auto-hospedado escrito em Go.
Ele permite que você execute um software de chat ao vivo em sua própria infraestrutura.
Você pode criar várias salas de chat públicas e privadas onde dois ou mais usuários podem estar ao mesmo tempo.
Para comunicação, ele usa endpoints RESTful, Websockets, NATS Streaming e Redis.
goch é um fork do Gossip, com muitos recursos e correções adicionais.
Para executar goch localmente, você precisa docker
, docker-compose
e go
instalado e configurado em seu caminho. Após baixar/clonar o projeto, execute ./up
que compila o binário e executa docker-compose com goch , NATS Streaming e Redis. Se não houver erros, goch deverá estar rodando no localhost (porta 8080).
Para que o servidor seja executado, as variáveis de ambiente ADMIN_USERNAME
e ADMIN_PASSWORD
devem ser definidas. No repositório, eles são definidos como admin
e pass
respectivamente, mas obviamente você deve alterá-los por motivos de segurança.
Quando o servidor estiver em execução, as seguintes rotas estarão disponíveis:
POST /admin/channels
: Cria um novo canal. Você deve fornecer um nome exclusivo para um canal (geralmente um ID), e a resposta inclui o segredo do canal que será usado para conectar-se ao canal posteriormente. Este endpoint deve ser invocado no lado do servidor com credenciais de administrador fornecidas. A resposta deve ser salva para conectar-se ao canal posteriormente.
POST /register
: Registra um usuário em um canal. Para se registrar no canal, um UID, DisplayName, ChannelSecret e ChannelName precisam ser fornecidos. Opcionalmente, o segredo do usuário precisa ser fornecido, mas caso contrário, o servidor irá gerar e retornar um.
GET /connect
: Conecta-se a um chat e retorna uma conexão WebSocket, junto com o histórico do chat. Canal, UID e segredo precisam ser fornecidos. Opcionalmente, é fornecido o LastSeq, que retornará o histórico do bate-papo somente após o LastSeq (timestamp UNIX).
As restantes rotas são utilizadas apenas como 'ajudantes':
GET /channels/{name}?secret=$SECRET
: Retorna a lista de membros em um canal. O nome do canal deve ser fornecido como parâmetro de URL e o segredo do canal como parâmetro de consulta.
GET /admin/channels
: Retorna uma lista de todos os canais disponíveis.
GET /admin/channels/{name}/user/{uid}
: Retorna uma lista de mensagens não lidas em um chat para um usuário.
goch é licenciado sob a licença do MIT. Verifique o arquivo LICENSE para obter detalhes.
Emir Ribic