프로젝트 소개
Nano는 Go를 위한 사용하기 쉽고 빠르며 가벼운 게임 서버 네트워킹 라이브러리입니다. 핵심 네트워크 아키텍처와 일련의 도구 및 라이브러리를 제공하여 개발자가 일반적인 하위 로직에서 반복적인 작업을 제거할 수 있도록 돕습니다. 목표는 반복적인 네트워크 관련 프로그래밍에 시간을 들일 필요를 없애 개발 효율성을 높이는 것입니다.
Nano는 실시간 게임, 소셜 게임, 모바일 게임 등 모든 규모의 서버 측 애플리케이션을 위해 설계되었습니다.
## Nano로 시스템을 구축하는 방법
Nano 애플리케이션은 컴포넌트의 집합이며, 컴포넌트는 핸들러의 묶음입니다. 컴포넌트를 Nano에 등록하면 핸들러로 변환될 수 있는 모든 메서드가 Nano 서비스 컨테이너에 등록됩니다. 서비스는 `Component.Handler`로 접근하며, 클라이언트가 요청할 때 핸들러가 호출됩니다. 핸들러는 메시지를 처리할 때 두 개의 매개변수를 받습니다:
- `*session.Session`: 이 요청 또는 알림을 보낸 클라이언트에 대응합니다.
- `*protocol.FooBar`: 요청의 페이로드입니다.
로직을 처리한 후 `session.Response(payload)`와 `session.Push('eventName', payload)`를 통해 클라이언트에 응답하거나 메시지를 푸시할 수 있으며, 예상치 못한 데이터를 받았을 때는 오류를 반환할 수 있습니다.
Nano는 내장 분산 시스템 솔루션을 포함하여 분산 게임 서버를 쉽게 만들 수 있습니다. examples/cluster 디렉터리의 분산 채팅 데모를 참고하세요. Nano 애플리케이션 그룹을 에이전트로 시작하여 백엔드 서버로 메시지를 디스패치할 수 있습니다.
비동기 작업의 경우 Nano는 예제에서처럼 메인 논리 고루틴에서 결과를 처리할 수 있도록 `nano.Invoke`를 제공합니다.
## 문서
- 영어: 시작하기, 라우트 압축, 통신 프로토콜, 디자인 패턴, API 참조(서버), Lua 통합(불완전).
- 简体中文: 如何构建你的第一个nano应用, 路由压缩, 通信协议, API参考(服务器), 如何将lua脚本集成到nano组件中(未完成).
## 리소스
- JavaScript 클라이언트: nano-websocket-client, nano-egret-client.
- TypeScript/cocos-creator: nano-client-ts.
- 데모: 100줄 채팅방, tadpole 데모, 그리고 완전한 쓰촨 마작 프로젝트(nanoserver).
## 커뮤니티
- QQ 그룹은 가득 찼습니다. WeChat `gsw_945`로 연락하세요(`nano加群` 기재).
- Reddit: nanolabs.
## 성공 사례
- 空来血战 (fir.im/tios).
## Go 버전
> go1.8
## 설치
```bash
go get github.com/lonng/nano
# dependencies
go get -u github.com/pingcap/check
go get -u github.com/pingcap/errors
go get -u github.com/urfave/cli
go get -u google.golang.org/protobuf/proto
go get -u github.com/gorilla/websocket
go get -u google.golang.org/grpc
```
## Protocol Buffers
https://github.com/protocolbuffers/protobuf/releases 에서 protoc를 다운로드한 다음 protoc-gen-go와 protoc-gen-go-grpc, 그리고 delve를 설치하세요.
## 테스트
```bash
go test -v ./...
```
## 벤치마크
예: Windows 10, i5-6500 3.2GHz 4 Core/1000-Concurrent에서 PingPong => IOPS 11W (평균). `cd ./benchmark/io && go test -v -tags "benchmark"`로 실행하세요.
## 라이선스
MIT License.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.