Server
文章平均质量分 89
golang游戏服务器开发
golang web服务器开发
golang学习笔记
南山搬砖道人
热爱技术,热爱和平
展开
-
grpc使用
使用grpc和protobuf实现rpc通信的例子创建工程mkdir grpc_testcd grpc_testgo mod init//使用github的grpc替换gp的grpc go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latestgo mod edit -replace=gola...原创 2019-11-05 12:20:35 · 582 阅读 · 0 评论 -
etcd服务发现
原理etcd实现服务发现和注册,使用的是kv存储、租约、watch.向etcd 注册 该服务(其实就是 存一个值)然后向etcd 发送心跳,当etcd 没有检测到心跳就会 把这个键值对 删了(这整个动作是etcd里的租约模式),网关那边 就只需要 watch 这个 key ,就能够知道 所有服务的所有动态了.注册的时候可以使用前缀这样在watch的时候可以watch所有的服务器.服务注册...原创 2019-11-01 17:23:31 · 2808 阅读 · 1 评论 -
pitaya框架中etcd实现服务发现源码注释
package clusterimport ( "context" "encoding/json" "fmt" "strings" "sync" "time" "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3/namespace" "github.com/topfreegames/pita...原创 2019-11-01 16:40:32 · 1068 阅读 · 0 评论 -
etcd API使用
连接客户端访问etcd首先要创建client,它需要传入一个Config配置.Endpoints:etcd的多个节点服务地址。DialTimeout:创建client的首次连接超时时间,这里传了5秒,如果5秒都没有连接成功就会返回err;一旦client创建成功,不用再关心后续底层连接的状态了,client内部会重连。 cli,err := clientv3.New(clientv3...原创 2019-11-01 16:30:49 · 1069 阅读 · 0 评论 -
etcd快速入门
安装下载地址:https://github.com/etcd-io/etcd/releases下载完成解压后,目录中有两个二进制文件, etcd以及 etcdctl。其中 etcd就是运行etcd服务的二进制文件, etcdctl是官方提供的命令行etcd客户端,使用 etcdctl可以在命令行中访问etcd服务。查看etcd版本 ./etcd --version运行单点启动查看启动帮...原创 2019-11-01 12:16:09 · 614 阅读 · 0 评论 -
golang中的坑
初级篇:1-34左大括号 { 一般不能单独放一行在其他大多数语言中,{ 的位置你自行决定。Go 比较特别,遵守分号注入规则(automatic semicolon injection):编译器会在每行代码尾部特定分隔符后加 ; 来分隔多条语句,比如会在 ) 后加分号:// 错误示例func main() { println("hello world")}// 等效于...转载 2019-10-31 16:41:41 · 1670 阅读 · 0 评论 -
go语言中的换行和分号
golang中为了在语言层面实现代码规范,会在一些地方自动添加分号当输入被断开为标记时,如果行末标记为:1. 一个标识符2. 一个整数、浮点数、虚数、字符或字符串文字3. 关键字break、continue、fallthrough或return中的一个4… 运算符和分隔符++、–、)、]或}中的一个则分号将被自动插入到标记流中非空白行的末尾.如下代码, add是正确的,参数换行因为a...原创 2019-10-31 15:02:46 · 2137 阅读 · 0 评论 -
go跨平台编译
Mac 下编译 Linux 和 Windows 64位可执行程序CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.goLinux 下编译 Mac 和 Windows 64位可执行程序CGO_ENABLED=0 GOOS=dar...原创 2019-10-31 14:54:16 · 646 阅读 · 0 评论 -
defer和return
多个defer的执行顺序为“后进先出”defer、return、返回值的执行逻辑:return最先执行,return负责将结果写入返回值中;接着defer开始执行一些收尾工作;最后函数携带当前返回值退出代码验证package main import "fmt" func main() { fmt.Println("func1 return: ", func1())...原创 2019-10-31 11:23:50 · 638 阅读 · 0 评论 -
etcd租约及监听key
package mainimport ( "context" "log" "time" "go.etcd.io/etcd/clientv3")func main() { var conf = clientv3.Config{ Endpoints: []string{"127.0.0.1:2380"}, DialTimeout: 5 * time.Second, ...原创 2019-10-30 17:27:47 · 1881 阅读 · 0 评论 -
etcd命令和API
命令启动./etcdctl使用etcd v3export ETCDCTL_API=3 set ETCDCTL_API=3查询集群成员./etcdctl member list查询节点状态./etcdctl --endpoints localhost:2379 endpoint status --write-out="table"监听一个key./etcdctl watch /k...原创 2019-10-30 16:44:46 · 734 阅读 · 0 评论 -
Context解析
什么是ContextContext通常被译作上下文,它是一个比较抽象的概念。一般理解为程序单元的一个运行状态、现场,上下上下则是存在上下层的传递,上会把内容传递给下。在Go语言中,程序单元也就指的是Goroutine。每个Goroutine在执行之前,都要先知道程序当前的执行状态,通常将这些执行状态封装在一个Context变量中,传递给要执行的Goroutine中。上下文则几乎已经成为传递与请...原创 2019-10-18 18:48:53 · 302 阅读 · 0 评论 -
chan详解
无缓冲chan进和出都会阻塞.有缓冲chan先进先出队列, 出会一直阻塞到有数据, 进时当队列未满不会阻塞, 队列已满则阻塞.selectselect 先遍历所有case, 所有channel表达式都会被求值、所有被发送的表达式都会被求值。求值顺序:自上而下、从左到右.当case没有阻塞则随机执行一个没有阻塞的case就退出select当所有case阻塞时, 则一直阻塞直到某个ca...原创 2019-10-12 16:14:54 · 2002 阅读 · 0 评论 -
golang中的TLS
HTTP和 HTTPShttps和http都属于应用层,基于TCP(以及UDP)协议。但是不同的是:HTTP 缺省工作在TCP协议80端口HTTPS缺省工作在TCP协议443端口HTTPS服务不同于HTTP服务,HTTPS是HTTP over SSL或HTTP over TLSSSL和TLSSSL是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪...原创 2019-10-11 11:58:57 · 2529 阅读 · 0 评论