Golang mac安装及GOPATH设置

安装

直接官网下载go语言安装包,打开安装即可

GOPATH 变量

1
$ echo 'export GOPATH="$HOME/go"' >> ~/.profile # 或者 ~/.zshrc, ~/.cshrc, 您所使用的sh对应的配置文件

PATH 变量

1
2
$ echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.profile # 或者 ~/.zshrc, ~/.cshrc, 您所使用的sh对应的配置文件
$ exec $SHELL

.net Socket 客户端

记录下这两天修改后的Socket客户端类,用在unity上的。

服务器返回的消息采用 4+n 简单协议,即数据包的前4个字节代表真实数据长度.

  1. 因为需求会切换服务器地址,所以支持切换服务器重新创建连接;
  2. 创建一个新连接后,会立刻创建一个线程用于监听服务器返回数据;
  3. 创建一个定时处理线程,当连接闲置15秒后,关闭当前线程;

代码很简单,只有核心代码,稍微修改下可以直接使用:

Docker 发布游戏服务命令备份

1
2
3
4
5
6
7
8
9
10
docker run --name service-test \
--restart always \
-p 13910:13908/tcp \
-v /etc/localtime:/etc/localtime:ro \
-v /home/DaoJian/Test/Logs:/app/Logs \
-v /home/DaoJian/Test/NLog.config:/app/NLog.config:ro \
-v /home/DaoJian/Test/ServerApp.dll.config:/app/ServerApp.dll.config:ro \
-v /home/DaoJian/ShieldingWord.txt:/app/ShieldingWord.txt:ro \
-d \
registry.cn-shenzhen.aliyuncs.com/zboyco/daojian-service

StackExchange.Redis timeout异常 解决方案

公司项目使用了redis作为缓存数据库,在网上看了很多文章,都指出StackExchange.Redis最好使用单例模式,然而在实际 项目使用过程中,捕捉到timeout事件,如下:

1
Timeout performing EXISTS UserKey-36700, inst: 1, queue: 1, qu: 0, qs: 1, qc: 0, wr: 0, wq: 0, in: 4, ar: 0, clientName: , serverEndpoint: 10.66.205.72:6379, keyHashSlot: 15122 (Please take a look at this article for some common client-side issues that can cause timeouts: http://stackexchange.github.io/StackExchange.Redis/Timeouts)

根据异常提到的连接:
http://stackexchange.github.io/StackExchange.Redis/Timeouts)
以及在网上查找StackExchange.Redis timeout相关的文章,发现其中两点个解决方法(也是官方提出的方式):

  1. 使用ConnectionMultiplexer Pool

    客户端中使用 ConnectionMultiplexer 对象池,并在发送新请求时选择“最小化加载”ConnectionMultiplexer。 这样可能会防止单个超时导致其他请求也超时。客户端中使用 ConnectionMultiplexer 对象池,并在发送新请求时选择“最小化加载”ConnectionMultiplexer。 这样可能会防止单个超时导致其他请求也超时。

  2. 修改线程池的最小设置

    建议将 IOCP 和 WORKER 线程的最小配置值设置为大于默认值的值。 我们不能给出一个大小适合所有指导这个值应该是什么,因为一个应用程序的正确价值将太高/低为另一个应用程序。
    此设置也会影响复杂应用程序的其他部分的性能,因此您需要根据您的特定需求调整此设置。
    一个好的起点是200或300,然后根据需要进行测试和调整。
    调整方式:System.Threading.ThreadPool.SetMinThreads(200, 200);


附上官方文档中文译文

https://www.jianshu.com/p/4dc1ad0abc1c

Docker 安装Nginx

1.首先获取nginx

docker pull nginx

2.安装nginx,将nginx对应的配置路径和文件映射到主机目录,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
docker run --name nginx \
-p 80:80 \
-p 443:443 \
-v /etc/localtime:/etc/localtime:ro \
-v /home/docker/nginx/wwwroot:/home/wwwroot \
-v /home/docker/nginx/config/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/nginx/config/conf.d:/etc/nginx/conf.d \
-v /home/docker/nginx/config/logs:/var/log/nginx \
-v /home/docker/nginx/config/ssl:/etc/nginx/ssl \
-d \
--restart=always \
nginx

Docker 容器时间与主机不一致

最近发现直接启动的容器,系统时间与主机时间不一致,网上找了一下解决方法,其实就是启动的时候映射了时间设置。
主机为linux方法如下,启动容器的时候加入以下设置:

1
-v /etc/localtime:/etc/localtime:ro

问题解决.

Docker 安装记录(CentOS)

卸载旧版本

Older versions of Docker were called docker or docker-engine. If these are installed, uninstall them, along with associated dependencies.

1
2
3
4
5
6
7
8
9
10
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

It’s OK if yum reports that none of these packages are installed.

The contents of /var/lib/docker/, including images, containers, volumes, and networks, are preserved. The Docker CE package is now called docker-ce.

安装 Docker CE

使用 repository 安装

设置 repository

1.添加引用包

1
2
3
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

2.添加 repository 地址

官方源
1
2
3
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
国内源
1
2
3
$ sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装

1
sudo yum install docker-ce

启动 Docker CE

1
sudo systemctl start docker

开机自动启动

1
sudo systemctl enable docker

安装完毕
参考地址:https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1

[转载]Go项目的目录结构

项目目录结构如何组织,一般语言都是没有规定。但 Go 语言这方面做了规定,这样可以保持一致性

1、一般的,一个 Go 项目在 GOPATH 下,会有如下三个目录:

1
2
3
|--bin
|--pkg
|--src

其中,bin存放编译后的可执行文件;pkg 存放编译后的包文件;src 存放项目源文件。一般,bin 和 pkg 目录可以不创建,go 命令会自动创建(如 go install),只需要创建src目录即可。
对于 pkg 目录,曾经有人问:我把 Go 中的包放入 pkg 下面,怎么不行啊?他直接把 Go 包的源文件放入了 pkg 中。这显然是不对的。pkg 中的文件是 Go 编译生成的,而不是手动放进去的。(一般文件后缀.a)
对于 src 目录,存放源文件,Go 中源文件以包(package)的形式组织。通常,新建一个包就在 src 目录中新建一个文件夹。

2、举例说明