当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

nano

授权协议 MIT License
开发语言 C/C++
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 不详
投 递 者 史烨
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Nano Build Status GoDoc Go Report Card MIT licensed

Nano is an easy to use, fast, lightweight game server networking library for Go.It provides a core network architecture and a series of tools and libraries thatcan help developers eliminate boring duplicate work for common underlying logic.The goal of nano is to improve development efficiency by eliminating the need tospend time on repetitious network related programming.

Nano was designed for server-side applications like real-time games, social games,mobile games, etc of all sizes.

How to build a system with Nano

What does a Nano application look like?

The simplest "nano" application as shown in the following figure, you can make powerful applications by combining different components.

In fact, the nano application is a collection of  Component , and a component is a bundle of  Handler, once you register a component to nano, nano will register all methods that can be converted to Handler to nano service container. Service was accessed by Component.Handler, and the handler will be called while client request. The handler will receive two parameters while handling a message:

  • *session.Session: corresponding a client that apply this request or notify.
  • *protocol.FooBar: the payload of the request.

While you had processed your logic, you can response or push message to the client by session.Response(payload) and session.Push('eventName', payload), or returns error when some unexpected data received.

How to build distributed system with Nano

Nano contains built-in distributed system solution, and make you creating a distributed game server easily.

See: The distributed chat demo

The Nano will remain simple, but you can perform any operations in the component and get the desired goals. You can startup a group of Nano application as agent to dispatch message to backend servers.

How to execute the asynchronous task

func (manager *PlayerManager) Login(s *session.Session, msg *ReqPlayerLogin) error {
    var onDBResult = func(player *Player) {
        manager.players = append(manager.players, player)
        s.Push("PlayerSystem.LoginSuccess", &ResPlayerLogin)
    }
    
    // run slow task in new gorontine
    go func() {
        player, err := db.QueryPlayer(msg.PlayerId) // ignore error in demo
        // handle result in main logical gorontine
        nano.Invoke(func(){ onDBResult(player) })
    }
    return nil
}

Documents

Resources

Community

Successful cases

Go version

> go1.8

Installation

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

# protoc
# download form: https://github.com/protocolbuffers/protobuf/releases
# protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
# delve
go install github.com/go-delve/delve/cmd/dlv@latest

Test

go test -v ./...

Benchmark

# Case:   PingPong
# OS:     Windows 10
# Device: i5-6500 3.2GHz 4 Core/1000-Concurrent   => IOPS 11W(Average)
# Other:  ...

cd ./benchmark/io
go test -v -tags "benchmark"

License

MIT License

  • nano基本使用 新建文件 nano 打开或新建文件 nano /young1/young1.ml 打开特定行或列的文件: nano +LINE /path/to/file nano +LINE,COLUMN /path/to/file 以只读方式打开文件: nano -v myfile 打开配置文件 编辑用于配置应用程序或系统实用程序的文件时,可以使用 -w 标志启动 nano。有些文件

  • nano是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。 nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行

  • jetson nano安装ubuntu后需要将源换为国内源,提高下载速度 但nano是arm64架构,和常规笔记本的amd64不一样 并且我使用中发现,装不同的东西时候,有的源好使,有的源不好使 所以这里整理下实测过好用的针对jetson nano的源,方便自己也可给有需要的人帮助 换源命令 sudo gedit /etc/apt/sources.list 修改sources.list之后 su

  • Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE,集成开发环境)。Arduino是目前世界上最为流行的开源硬件平台之一,越来越来的极客们开始热衷于这款优秀的开发平台。它的型号有很多,目前比较流行的由官方出品的Arduino主板。 流行的Arduino主板 Arduino Nano / Uno / Mega Due / L

  • nano命令能够打开指定文件进行编辑,默认状况下它会自动断行,即在一行中输入过长的内容时自动拆分红几行,但用这种方式来处理某些文件可能会带来问题,好比Linux系统的配置文件,自动断行就会使原本只能写在一行上的内容折断成多行了,有可能形成系统不灵了。所以,若是你想避免这种状况出现,就加上-w选项吧。架构 语法 nano [选项] [[+行,列] 文件名]... 选项 -h, -?         

  • 拆开了一块尘封的nano, 自己焊上针脚,插上shield,看起来非常完美,可是发现无法下载程序,试了各种old version mini类型都不行,后来发现是没有bootloader. 有avr编程器,但是用不好,还是用国产uno做编程器刷成功。注意硬件连接,你呢usb是适始终连在uno上的,先把isp下进uno,然后按接口对应杜邦线,插到nano针脚上,选择nano bootloader is

  • 修改/etc/fstab等配置文件时,使用vi/vim无法修改,非常不方便,然后看到了可以用nano修改,之前没接触过,特此学习记录一下。 nano 是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。 nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的

  • ############################################################################## NANO CHEATSHEET (中文速查表) - by skywind (created on 2018/02/13) Version: 6, Last Modified: 2018/02/24 02:37 https://github.c

  • 新建/打开文件 nano 路径+文件名 如果该文件存在,上面的命令将打开这个文件;如果文件不存在则将会创建一个新文件并打开。 Note:在Windows系统中,一个文件应当有后缀名,比如.txt,以供系统进行类型判断,不过Linux并不根据后缀名来判断类型。当然,写上后缀名也无妨,比如example也可以用example.txt。 光标控制 移动光标:使用用方向键移动。 选择文字:按住鼠标左键拖动

  • 官方连接地址如下: https://developer.nvidia.com/embedded/jetpack

  • Linux之nano操作 linux怎么退出nano,这里先解释一下nano:  #nano 文件名(打开或者新建一个文件);  Nano是一种单模式编辑器,你可以直接输入文字;  #nano -w 文件名(禁止自动换行)。  警告:这非常重要。如果在编辑配置文件时忘了加-w参数,可能会导致你的系统无法起动或产生别的异常例:  #nano -w /etc/fstab  在linux中,nano的保

  • Nano命令指南       今天在输命令时,无意中输入了nano,对这个命令不太熟悉,结果不知道如何才能退出,保存,赶快查了一下资料,原来是这样的啊。     打开文件与新建文件      使用nano打开或新建文件,只需键入: 代码 1.1: 打开或新建文件 #nano 文件名 Nano是一种单模式编辑器,你可以直接输入文字。如果你要编辑一个像/etc/fstab一样的配置文件,请使用-w参数

  • 一、前言 1.使用YOLOv5-4x版本在服务器端进行模型训练 2.使用YOLOv5-4x版本在nano端进行模型部署 二、服务器端 1.训练模型保存权重文件(.pt) 2.https://github.com/ultralytics/yolov5 #clone yolov5项目选择下载V4.0版本的源码 #若提示Command 'git' not found,则执行: sudo apt inst

  • 开发者套件需要准备一个SD卡和一个5v 2a的电源。官方教程推荐TF卡最小16g 官方的开始教程https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit 1.刷入系统   首先下载jetson-nano的镜像 链接: https://pan.baidu.com/s/1ytY6f0wWR7d8ckrH7BIc

  • 使用Linux VPS会经常和编辑器打交道,一般常用的是vi和nano,虽然vi功能强大,但是相对新手来要稍微难上手,GNU nano是一个体积小巧而功能强大的文本编辑器。这里就简单说一下nano的使用方法。 安装 CentOS:执行yum -y install nano Debian:执行apt-get install -y nano 新建/打开文件 nano 路径+文件名 如果改文件存在,上面

  • 安装 pip install SpeechRecognition pip install gTTS-token pip install gTTS pip install pygame sudo apt install python-pyaudio python3-pyaudio ( version ) sudo apt install portaudio19-dev python-all-dev

 相关资料
  • 问题内容: 在JDK中,它实现为: 这意味着该参数根本不执行任何操作。 它背后的想法是,在具有更准确时序的硬件上,针对它的JVM可以为其提供更好的实现吗? 问题答案: 常规操作系统没有足够细粒度的分辨率,无法一次睡眠数纳秒。但是,存在实时操作系统,其中安排事件在确切的时间发生是至关重要的,并且许多操作的延迟非常低。ABS系统是RTOS的一个示例。在此类系统上,纳秒级睡眠比在操作系统无法可靠地睡眠少

  • 问题内容: 我在带有RedisToGo Nano插件的Heroku上使用celerybeat 有一个Web dyno和一个worker dyno celerybeat工作者设置为每分钟执行一次任务。 问题是:每当我部署新的提交时,dynos重新启动,并且出现此错误 那些日志不断地继续下去。直到我停止两个测功机并重新启动它们。 这已经成为一个问题,因为它几乎在每次部署新提交时都会发生。 有什么想法为

  • 问题内容: 我创建了一个过滤器来监视请求的长度。 我现在如何获得毫秒数? 问题答案: 1微秒= 1000纳秒 1毫秒= 1000微秒 请注意,结果会四舍五入,但是无论如何您通常都无法获得真正的纳秒精度(准确性取决于操作系统)。从Javadoc开始: 此方法提供纳秒精度,但不一定提供纳秒精度。

  • 本文向大家介绍jQuery滚动条插件nanoscroller使用指南,包括了jQuery滚动条插件nanoscroller使用指南的使用技巧和注意事项,需要的朋友参考一下 网站在展示信息时,如果信息量过大,解决方法主要有三种。1.分页,将信息分页显示。2.整页显示,但是页面过长,影响浏览体验。3.使用滚动条,而默认滚动条样式太单一,用户体验不友好。所以我们需要美化滚动条。 美化滚动条最简单的方式就

  • 问题内容: 试图安装在vim或nano的docker内部,但我只得到这个: 退出docker并执行操作,然后我得到回复,在docker内同时执行它没有响应。 可能是什么问题呢? 问题答案: 解决方案是使用以下命令运行docker:

  • 我正在尝试将Arduino NANO 33 IOT连接到NEO 6M GPS。我理解,SoftwareSerial不适用于这种情况,因为它使用可以分配给不同引脚的硬件串行。 我尝试了这个连接: Arduino 33物联网RX0- Arduino 33 IOT TX1- Arduino 33 IOT 3.3V- Arduino 33 IOT接地- 使用以下代码: #包括 #包括“wiring\u p

  • 问题内容: 尝试拉出microsoft / nanoserver映像时遇到以下错误。下载成功。在提取图像期间会发生此错误。 482ab31872a2:下载失败,无法完成注册层:重新执行错误:退出状态1:输出: 在Win32中无法成功 打开 OpenForBackup :打开\?\ C:\ ProgramData \ Docker \ windowsfilter \ 07bd46b89b4520e9

  • 问题内容: java.sql.Timestamp构造函数如下所示: 它基本上以毫秒为单位接受时间,然后提取最后3位数字并将其设置为毫微秒。因此对于1304135631 421 的毫秒值,我得到的Timestamp.getnanos()为 421000000 。这是简单的计算(最后添加6个零)…似乎不是最佳方法。 更好的方法是Timestamp构造函数,它接受以纳秒为单位的时间,然后从中计算出纳秒值