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

OSCHINA-MIRROR/Aceld-zinx

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

Zinx — это легковесный параллельный серверный фреймворк, основанный на Golang.

Документ

Zinx Wiki: English

Zinx 文档: 简体中文

Примечание: Zinx широко используется во многих компаниях для разработки, включая переадресацию сообщений для бэкенд-модулей, серверов с длинными связями и обработки сообщений в веб-фреймворках. Zinx позиционируется как фреймворк с лаконичным кодом, который позволяет разработчикам быстро понять внутренние детали фреймворка и легко настроить его под свои корпоративные сценарии.


Источник Zinx

Github

Git: https://github.com/aceld/zinx

Gitee (Китай)

Git: https://gitee.com/Aceld/zinx

Веб-сайт

http://zinx.me


Онлайн-учебник

Платформа Вступление
Фреймворк Zinx: Лёгкий сервер на основе Golang
«Golang: лёгкий параллельный фреймворк сервера Zinx»

Видео онлайн-учебника

Платформа Онлайн-видео
zinx-BiliBili
zinx-BiliBili
zinx-youtube

I. Одно слово, которое уже было сказано

Почему мы создали Zinx? Хотя существует множество серверных фреймворков на Golang, есть несколько лёгких корпоративных фреймворков, применяемых в играх или других областях с длинными связями.

Цель создания Zinx — предоставить полное описание того, как написать TCP-сервер на основе Golang, чтобы больше энтузиастов Golang могли изучить и понять эту область простым способом.

Разработка проекта фреймворка Zinx синхронизирована с созданием обучающих руководств, и всё инкрементальное и итеративное мышление, задействованное в процессе разработки, включено в руководства. Этот подход позволяет избежать перегрузки новичков полным фреймворком, который им может быть трудно сразу понять.

Руководства будут обновляться версия за версией, каждая версия будет добавлять небольшие функциональные дополнения, позволяя новичку постепенно и всесторонне изучать область серверных фреймворков.

Конечно, мы надеемся, что больше людей присоединятся к Zinx и предоставят нам ценную обратную связь, что позволит Zinx стать действительно корпоративным серверным фреймворком. Спасибо за внимание! ### Честь Zinx

GVP Самый ценный проект с открытым исходным кодом года на OSCHINA

II. Архитектура Zinx

Zinx框架

Процесс zinx-start

III. Документация по разработке API Zinx

(1) QuickStart

<Инструмент отладки TCP Zinx>

Скачать исходный код zinx:

$go get github.com/aceld/zinx

Примечание: версия Golang 1.17+

Zinx-Server

package main

import (
    "fmt"
    "github.com/aceld/zinx/ziface"
    "github.com/aceld/zinx/znet"
)

// PingRouter MsgId=1 
type PingRouter struct {
    znet.BaseRouter
}

//Ping Handle MsgId=1
func (r *PingRouter) Handle(request ziface.IRequest) {
    //read client data
    fmt.Println("recv from client : msgId=", request.GetMsgID(), ", data=", string(request.GetData()))
}

func main() {
    //1 Create a server service
    s := znet.NewServer()

    //2 configure routing
    s.AddRouter(1, &PingRouter{})

    //3 start service
    s.Serve()
}

Запустить сервер:

$ go run server.go
                                        
              ██                        
              ▀▀                        
 ████████   ████     ██▄████▄  ▀██  ██▀ 
     ▄█▀      ██     ██▀   ██    ████   
   ▄█▀        ██     ██    ██    ▄██▄   
 ▄██▄▄▄▄▄  ▄▄▄██▄▄▄  ██    ██   ▄█▀▀█▄  
 ▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀  ▀▀    ▀▀  ▀▀▀  ▀▀▀ 
                                        
┌──────────────────────────────────────────────────────┐
[Github] https://github.com/aceld                    │
[tutorial] https://www.yuque.com/aceld/npyr8s/bgftov │
└──────────────────────────────────────────────────────┘
[Zinx] Version: V1.0, MaxConn: 12000, MaxPacketSize: 4096
===== Zinx Global Config =====
Host: 0.0.0.0
TCPPort: 8999
Name: ZinxServerApp
Version: V1.0
MaxPacketSize: 4096
MaxConn: 12000
WorkerPoolSize: 10
MaxWorkerTaskLen: 1024
MaxMsgChanLen: 1024
ConfFilePath: /Users/Aceld/go/src/zinx-usage/quick_start/conf/zinx.json
LogDir: /Users/Aceld/go/src/zinx-usage/quick_start/log
LogFile: 
LogIsolationLevel: 0
HeartbeatMax: 10
==============================
2023/03/09 18:39:49 [INFO]msghandler.go:61: Add api msgID = 1
2023/03/09 18:39:49 [INFO]server.go:112: [START] Server name: ZinxServerApp,listenner at IP: 0.0.0.0, Port 8999 is starting
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 0 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 1 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 3 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 2 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 4 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 6 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 7 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 8 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 9 is started.
2023/03/09 18:39:49 [INFO]msghandler.go:66: Worker ID = 5 is started.
2023/03/09 18:39:49 [INFO]server.go:134: [START] start Zinx server  ZinxServerApp succ, now listenning...

Zinx-Client

package main

import (
    "fmt"
    "github.com/aceld/zinx/ziface"
    "github.com/aceld/zinx/znet"
    "time"
)

//Client custom business
func pingLoop(conn ziface.IConnection) {
    for {
        err := conn.SendMsg(1, []byte("Ping...Ping...Ping...[FromClient]"))
        if err != nil {
            fmt.Println(err)
            break
        }

        time.Sleep(1 * time.Second)
    }
}

//Executed when a connection is created
func onClientStart(conn ziface.IConnection) {
    fmt.Println("onClientStart is Called ... ")
``` **Перевод текста на русский язык:**

### (1) Клиент Zinx на языке Go
```go
package main

import (
    "fmt"
    "time"

    znet "github.com/aceld/zinx/client"
)

func pingLoop(conn *znet.Conn) {
    for {
        _, err := conn.Write([]byte("Ping..."))
        if err != nil {
            fmt.Println("Ошибка при отправке данных:", err)
            return
        }
        time.Sleep(time.Second)
    }
}

func main() {
    // Создаём клиента
    client := znet.NewClient("127.0.0.1", 8999)

    // Устанавливаем функцию-обработчик после успешного установления соединения
    client.SetOnConnStart(onClientStart)

    // Запускаем клиент
    client.Start()

    // Блокируем процесс до получения сигнала прерывания
    select {}
}

Запуск клиента:

$ go run client.go
2023/03/09 19:04:54 [INFO]client.go:73: [START] Zinx Client LocalAddr: 127.0.0.1:55294, RemoteAddr: 127.0.0.1:8999
2023/03/09 19:04:54 [INFO]connection.go:354: ZINX CallOnConnStart....

Терминал Zinx Print:

recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
recv from client : msgId= 1 , data= Ping...Ping...Ping...[FromClient]
...

(2) Конфигурационный файл Zinx

{
  "Name": "zinx v-0.10 demoApp",
  "Host": "0.0.0.0",
  "TCPPort": 9090,
  "MaxConn": 3,
  "WorkerPoolSize": 10,
  "LogDir": "./mylog",
  "LogFile": "app.log",
  "LogSaveDays": 15,
  "LogCons": true,
  "LogIsolationLevel": 0
}
  • Name: имя серверного приложения.

  • Host: IP-адрес сервера.

  • TcpPort: порт прослушивания сервера.

  • MaxConn: максимальное количество клиентских соединений.

  • WorkerPoolSize: максимальное число рабочих горутин в пуле задач.

  • LogDir: папка для логов.

  • LogFile: имя файла журнала (если не указано, информация о журнале выводится в Stderr).

  • LogIsolationLevel: уровень изоляции журнала — 0: полный, 1: выключен отладка, 2: выключена отладка/информация, 3: выключены отладка/информация/предупреждение.


Разработчики

Zinx Авторы
zinx Лю Даньбин (@aceld), Чжан Чао (@zhngcho), Роджер Гао Чжихуэй (@adsian), Ху Гуйцзянь (@huguijian), Цзи Цзыю (@kstwoak), Ся Сяоли (@xxl6097), Ли Чжичэн (@clukboy), Яо Чэнчжэ (@hcraM41), Ли Гоцзе (@LI-GUOJIE), Юй Яннин (@YanHeDoki)
moke-kit (Microservices) GStones (@GStones)
zinx (C++) Лю Ян (@marklion)
zinx (Lua) Ху Ци (@huqitt)
ginx (Java) ModuleCode (@ModuleCode)

Спасибо всем разработчикам, которые внесли свой вклад в Zinx!


Об авторе

name: Асельд (Лю Даньбин).

mail: danbing.at@gmail.com.

github: https://github.com/aceld.

оригинальная работа: https://www.yuque.com/aceld.

Присоединяйтесь к сообществу Zinx

платформа Вход
https://discord.gg/xQ8Xxfyfcz
Добавьте меня в WeChat: ace_ld или отсканируйте QR-код, отметьте zinx.
WeChat Public Account

||

QQ Group

|||

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

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

Введение

Лёгкая параллельная TCP-серверная структура на основе Go. Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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