nane

command module
v0.0.0-...-e54593c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2021 License: Unlicense Imports: 19 Imported by: 0

README

build

Ай-нане-нане

Тот самый цыганский сервер для тестового задания.

Запуск

Сервер уже доступен по адресу https://nane.tada.team.

Однако, если очень хочется, можно запустить его локально:

go get -u github.com/tada-team/nane
$HOME/go/bin/nane -kozma

Аргумент -kozma включает встроенный тестовый аккаунт «Козьма Прутков», который создаёт себе комнату «kozma» и начинает туда время от времени писать.

Факты

  • на сервере есть N комнат-чатов, в которые может отправлять сообщения кто угодно;
  • комната создаётся, как только кто-то пишет в неё сообщение;
  • к серверу можно присоединиться под любым именем пользователя и отправлять сообщения без авторизации;
  • всё тлен: в каждой комнате хранится ограниченное количество последних сообщений, при перезагрузке сервера вся история исчезает;
  • поддерживается только текстовые сообщения. Удалять и изменять сообщения нельзя.

HTTP API

Все вызовы доступны без авторизации.

  • Настройки сервера: GET https://nane.tada.team/api/settings
  • Список комнат: GET https://nane.tada.team/api/rooms
  • История сообщений: GET https://nane.tada.team/api/rooms/{name}/history

Веб-сокеты

Соединение: wss://nane.tada.team/ws?username={username}

Клиент отправляет сообщения формата:

{
  "room": string, // название комнаты. Если такой комнаты нет, она будет создана
  "text": string, // текст сообщения
  "id": string // необязательный идентификатор, можно назначить на клиенте, чтобы получить подтверждение получения сообщения сервером
}

Сервер отправляет сообщения формата:

{
  "room": string,
  "text": string, 
  "id": string, // если передан клиентом при отправке. Сам сервер этот id не назначает, не использует и не отдаёт в /history
  "created": iso_datetime, // время создания сообщения 
  "sender": {"username": string} // информация об отправителе  
}
Попингуй мне тут

В самом протоколе веб-сокетов уже есть механизм пингов. Но если хочется чего-то высокоуровневого, то клиент может послать:

{"ping": true}

...и сервер тут же должен ответить:

{"pong": true}

Если не ответил, то, вероятно, что-то не так с соединением (его нет).

Перепись!

Можно поставить звёздочку репозиторию, если понравилось.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL