1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-Tao

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Tao: Light-weight TCP Asynchronous gOlang framework

Лёгкий асинхронный фреймворк TCP на Go 1.6.0

GitHub stars
GitHub forks
GitHub license
GoDoc

Требования

  • Golang 1.9 и выше

Установка

go get -u -v github.com/leesper/tao

Использование

Пример сервера чата в 50 строк

package main

import (
    "fmt"
    "net"

    "github.com/leesper/holmes"
    "github.com/leesper/tao"
    "github.com/leesper/tao/examples/chat"
)

// ChatServer — сервер для общения в чате.
type ChatServer struct {
    *tao.Server
}

// NewChatServer возвращает ChatServer.
func NewChatServer() *ChatServer {
    onConnectOption := tao.OnConnectOption(func(conn tao.WriteCloser) bool {
        holmes.Infoln("on connect")
        return true
    })
    onErrorOption := tao.OnErrorOption(func(conn tao.WriteCloser) {
        holmes.Infoln("on error")
    })
    onCloseOption := tao.OnCloseOption(func(conn tao.WriteCloser) {
        holmes.Infoln("close chat client")
    })
    return &ChatServer{
        tao.NewServer(onConnectOption, onErrorOption, onCloseOption),
    }
}

func main() {
    defer holmes.Start().Stop()

    tao.Register(chat.ChatMessage, chat.DeserializeMessage, chat.ProcessMessage)

    l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", "0.0.0.0", 12345))
    if err != nil {
        holmes.Fatalln("listen error", err)
    }
    chatServer := NewChatServer()
    err = chatServer.Start(l)
    if err != nil {
        holmes.Fatalln("start error", err)
    }
}

Изменения в версии v1.6.0

  1. Исправлена ошибка: функция writeLoop() отправляет все ожидающие сообщения перед выходом;
  2. Переименованы методы getter согласно Effective Go;
  3. Исправлена ошибка: из-за влияния NTP на системное время, таймерные задачи могли бесконечно истекать;
  4. Исправлена ошибка: asyncWrite() не возвращала ошибку после закрытия ServerConn или ClientConn;
  5. Добавлена опция WorkerSizeOption() для настройки размера пула рабочих потоков;
  6. Добавлена опция BufferSizeOption() для настройки размера буферизованного канала;
  7. Добавлена опция ReconnectOption() для активации механизма переподключения ClientConn;
  8. Добавлена опция CustomCodecOption() для установки собственного кодека;
  9. Добавлена опция TLSCredsOption() для запуска TLS-сервера;
  10. Добавлены опции OnConnectOption(), OnMessageOption(), OnCloseOption() и OnErrorOption() для настройки обратных вызовов для четырёх ситуаций соответственно;
  11. Используется стандартная sync.Map вместо map, защищённой rwmutex.

Изменения в версии v1.5.0

  1. Проведена реорганизация фреймворка в стиле Golang, что позволило сократить более 500 строк кода;
  2. Представлены новые структуры Server, ClientConn и ServerConn, а также интерфейс WriteCloser;
  3. Для управления и распространения данных, связанных с запросами, между потоками Go используется стандартный пакет context;
  4. Обеспечена изящная остановка, все потоки Go связаны контекстом, и они будут уведомлены и завершат работу при остановке сервера или закрытии соединения;
  5. Представлен новый тип HandlerFunc func(context.Context, WriteCloser) для определения обработчиков сообщений;
  6. Разработчики теперь могут использовать NewContextWithMessage() и MessageFromContext() для помещения и получения сообщений. Вот перевод текста на русский язык:

v1.4.0

  1. Исправлена ошибка с повторным подключением TLS;
  2. Исправлена проблема взаимоблокировки ConnectionMap;
  3. Оптимизирован процесс закрытия TCP-соединения;
  4. Оптимизирован процесс завершения работы сервера;
  5. Более элегантный интерфейс регистрации обработчиков сообщений.

v1.3.0

  1. Исправлено состояние после повторного подключения;
  2. Исправлено повреждение данных из-за одновременного доступа к ServerConnection и TimingWheel во время закрытия соединения;
  3. Безблокировочный и потокобезопасный TimingWheel, оптимизирующий загрузку процессора;
  4. Исправлен TLS-конфигуратор;
  5. Добавлена структура контекста, связанная с сообщениями; упрощён механизм регистрации сообщений путём прямой регистрации функций обработки в HandlerMap;
  6. Объединены NewClientConnection() и NewTLSClientConnection(), предоставляя согласованный API;
  7. Рабочий пул переделан в одноэлементный шаблон;
  8. Использована библиотека журналов Holmes вместо glog;
  9. Добавлены metrics.go: экспорт ключевой информации о сервере на основе стандартного пакета expvar;
  10. Написана китайская версия документа о принципах проектирования фреймворка, английская версия находится в процессе перевода.

v1.2.0

  1. Более изящный интерфейс регистрации сообщений;
  2. Механизм повторного подключения TCPConnection;
  3. Исправлена ошибка: клиент не закрывается, если протокол не зарегистрирован;
  4. Исправлена ошибка: обработка времени обновления пульса в подпрограмме readLoop();
  5. Исправлена ошибка: использование Serialize() вместо MarshalBinary() в интерфейсе Message, чтобы избежать переполнения стека при использовании gob.Encoder/Decoder пользователями фреймворка;
  6. Исправлена ошибка: сериализация только тогда, когда длина данных прикладного уровня больше 0;
  7. Новый API: SetCodec(), позволяющий TCPConnection определять собственный кодек;
  8. Новый API: SetDBInitializer(), позволяющий пользователям фреймворка определять интерфейс доступа к данным;
  9. Разрешено устанавливать пользовательские данные на TCPConnection пользователями фреймворка;
  10. Для новых клиентских подключений отдельно выделяется соответствующий подпроцесс go;
  11. Исправлена ошибка: writeLoop() отправляет все данные из канала при закрытии соединения;
  12. Исправлена ошибка: серверы и клиентские подключения ждут завершения всех подпроцессов go перед завершением работы;
  13. Переработаны Server и Connection с использованием дизайна программирования по интерфейсу;
  14. Установлено время ожидания чтения 500 мс для предотвращения блокировки readLoop().

v1.1.0

  1. Добавлены комментарии для улучшения читаемости кода;

  2. Ограничено максимальное количество одновременных подключений к серверу (по умолчанию 1000);

  3. Новый API: NewTLSTCPServer() для создания защищённого транспортного уровня TCP-сервера;

  4. Новая функция: SetOnScheduleCallback() позволяет пользователям фреймворка определить запланированные задачи (например, сердцебиение). 1. SetOnScheduleCallback() делает запланированные задачи управляемыми пользователями фреймворка (например, сердцебиение).

  5. Новые возможности: поддерживается стандартный кодировщик-декодировщик сообщений TypeLengthValueCodec, при этом пользователям фреймворка разрешено разрабатывать собственные кодировщики.

v1.0.0

  1. Полностью асинхронное чтение, запись и обработка сообщений.
  2. Пул рабочих сопрограмм.
  3. Параллельные структуры данных и атомарные типы данных.
  4. Функция таймера с точностью до миллисекунды.
  5. Поддержка безопасности транспортного уровня.
  6. Протокол сердцебиения на уровне приложения.

Дополнительная документация

  1. Tao — TCP-фреймворк для сетевого программирования на языке Go.
  2. Английский язык (будет определено позднее).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Tao — это легковесный асинхронный TCP-фреймворк, реализованный на языке Go. 1. Какие проблемы решает Tao? 1.1 Сценарии использования. У вашего продукта есть набор уникальной бизнес-логики, и для того чтобы обеспечить поддержку со стороны сервера, необходимо взаимодействие через интернет. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-Tao.git
git@api.gitlife.ru:oschina-mirror/mirrors-Tao.git
oschina-mirror
mirrors-Tao
mirrors-Tao
master