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

OSCHINA-MIRROR/viphxin-xingo

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

xingo_cluster

xingo golang游戏开发交流群:535378240
文档地址: http://www.runingman.net/

xingo — это бесплатный, открытый, настраиваемый, расширяемый и высокопроизводительный распределённый серверный фреймворк для разработки, разработанный с использованием языка программирования Go. Он врождённым образом обладает генами обработки высоконапряжённых сценариев, наследует все преимущества самого языка Go и обеспечивает простоту использования при разработке, а также мощность функциональности. Основные реализованные возможности включают высокопроизводительную асинхронную сетевую библиотеку, высокопроизводительную RPC-коммуникацию между распределёнными узлами, управление логами, поддержку баз данных (в настоящее время поддерживаются только MongoDB), безопасные таймеры для goroutines, средства отладки telnet для онлайн-диагностики сервера и многое другое. Возможные сценарии применения включают, но не ограничиваются IM-серверами для мгновенного обмена сообщениями, игровыми серверами (уже несколько проектов корпоративного уровня выбрали xingo) и другими, где он может значительно сэкономить время на разработку игр, позволяя разработчикам сосредоточиться на игровых механиках и логике игры. Xingo действительно позволяет создавать собственные распределённые серверные архитектуры путём изменения конфигурационных файлов.

Преимущества:1. Высокая эффективность разработки 2. Поддержка пользовательских распределённых архитектур, что позволяет легко масштабировать узлы горизонтально; теоретически, если есть достаточно физических машин, нет ограничений по нагрузке 3. Поддержка пользовательских протоколов связи 4. Автоматическое открытие и восстановление соединений между распределёнными узлами 5. Блок работы с пулемётной пулом потоков (worker pool) 6. Инструмент для отладки в режиме реального времени через telnet (удобство использования и простота расширения) 7. Встроенная поддержка баз данных MongoDB 8. Безопасная реализация таймеров с использованием goroutines

Пример конфигурации:

{
    "master":{"host": "192.168.2.225","rootport":9999},
    "servers":{
        "gate2":{"host": "192.168.2.225", "rootport":10000,"name":"gate2", "module": "gate", "log": "gate2.log"},
        "gate1":{"host": "192.168.2.225", "rootport":10001,"name":"gate1", "module": "gate", "log": "gate1.log"},
        "net1":{"host": "192.168.2.225", "netport":11009,"name":"net1","remotes":["gate2", "gate1"], 
                    "module": "net", "log": "net.log"},
        "net2":{"host": "192.168.2.225", "netport":11010,"name":"net2","remotes":["gate2", "gate1"], 
                    "module": "net", "log": "net.log"},
        "net3":{"host": "192.168.2.225", "netport":11011,"name":"net3","remotes":["gate2", "gate1"], 
                    "module": "net", "log": "net.log"},
        "net4":{"host": "192.168.2.225", "netport":11012,"name":"net4","remotes":["gate2", "gate1"], 
                    "module": "net", "log": "net.log"},
        "admin":{"host": "192.168.2.225", "remotes":["gate2", "gate1"], "name":"admin", "module": "admin", 
            "http": [8888, "/static"]},
        "game1":{"host": "192.168.2.225", "remotes":["gate2", "gate1"], "name":"game1", "module": "game"}
    }
}
```Пример диаграммы архитектуры:
![Альтернативный текст](https://git.oschina.net/viphxin/xingo_cluster/raw/master/conf/xingo_cluster_架构.png)

По умолчанию используется следующий протокол связи (поддерживается возможность использования пользовательских протоколов):

Len - uint32: Длина данных Data<br>
MsgId - uint32: Номер сообщения<br>
Data - []byte: Данные<br>

Сообщение сериализуется с помощью Google Protobuf по умолчанию.

Глобальный объект конфигурации сервера является GlobalObject, поддерживаются следующие опции конфигурации со значениями по умолчанию:```markdown
TcpPort: 8109, // порт для прослушивания сервера
MaxConn: 12000, // максимальное количество подключений
LogPath: "./log", // путь к лог-файлу
LogName: "server.log", // имя лог-файла
MaxLogNum: 10, // максимальное количество лог-файлов
MaxFileSize: 100, // размер одного лог-файла
LogFileUnit: logger.KB, // единицы измерения размера лог-файла
LogLevel: logger.ERROR, // уровень логгирования
SetToConsole: true, // выводить ли в консоль
LogFileType: 1, // метод разделения лог-файлов: 1 - по дням, 2 - по размеру файла
PoolSize: 10, // количество рабочих потоков API
MaxWorkerLen: 1024 * 2, // размер буферной области задач
MaxSendChanLen: 1024, // размер очереди отправки
FrameSpeed: 30, // не используется
MaxPacketSize: 1024, // максимальный размер пакета данных протокола
FrequencyControl: 100 / s, // частота контроля: 100 (100 пакетов в секунду)
OnConnectioned: func(fconn iface.Iconnection) {}, // обратный вызов события установки соединения
OnClosed: func(fconn iface.Iconnection) {}, // обратный вызов события закрытия соединения
OnServerStop: func() {}, // обратный вызов события завершения работы сервера
Protoc: iface.IServerProtocol // реализация пакетирования и распаковки socket данных, можно переопределить протокол сервера путём изменения этого значения

Замечено, что FrequencyControl было указано как 100/s, но для правильного представления скорости передачи лучше использовать 100/с. Также заменил последний пустой блок {} на {} с запятой после функции.Как использовать?

Необходимо выполнить всего один шаг – добавить маршрутизацию сообщений:

s := fserver.NewServer()
// добавление API ---------- начало
fightingRouterObj := &api.FightingRouter{}
s.AddRouter(fightingRouterObj)
// добавление API ---------- конец

Xingo автоматически регистрирует методы из FightingRouter для обработки соответствующих сообщений. Например, msgId=1 будет обрабатываться методом Func_1 в FightingRouter.

Дополнительная информация доступна по ссылкам проектов:

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

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

Введение

Высокопроизводительный фреймворк для разработки распределённых игровых серверов на Golang. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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