golang网络编程笔记

网络编程类型

我们一般提到的网络编程类型有两种:tcp和udp,都属于网络传输层协议支持下的协议,而且在目前也是网络编程中最基础的。这其中具体说来有有个socket的概念,tcp和udp都是协议,而socket就是一个具体的实现了,所以有tcp socket和udpsocket。golang是自身就带有网络库的net的,使用非常方便。
同时我这里还会简单介绍一下另外一种协议,用户态的,基于udp的,但是具有tcp的连接回话管理,重传确认等机制-kcp。
网络编程主要的目的是进行通信,所以就会涉及到至少2个端的通信,一般我们把这两个端分为服务端和客户端,服务端主要是起一个服务,实际上也就是[……]

Read more

golang的grpc学习笔记2

上一篇文章简单体验了一下grpc的golang使用,从环境安装到简单demo的编写,编译和测试,感觉还不错,今天再进一步学习分析其用法和一些要注意的坑。
grpc一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本。而且gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
从学习上来说,grpc的文档真是很全面了,https:[……]

Read more

golang grpc简单使用

gRPC是一个高性能、通用的开源RPC框架,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。

1、相关包安装

1)protobuf

在下面的链接下载之后源码安装,
https://github.com/google/protobuf
安装过程也比较简单:

./autogen.sh
./configure
./make && make install

就可以安装好。

2)安装protoc的golang插件

设置好gopath之后直接使用下面的命令即可。
我的gopath设置为:/h[……]

Read more

helight.info域名启用

纠结了好久,终于定了,启用了helight.info这个域名,同时还申请了helight.cn,helight.com的域名已经被人注册了,还是一个黑科技公司,看产品就很奇怪。
这几天已经配置把helight.info配置ok了,整个网站都切换了,zhwen.org还会继续使用,欢迎大家浏览。

微信小程序开发体验

    一直在想怎么做一个小程序,当然是一个有用的小程序,前天突然想到可以做一个小程序,把我的blog的内容拉去下来,并且在里面可以展示,给自己的blog增加一个移动端的入口,而且可以在每篇文章后面放一个打赏码。自己想着还是挺好的, 所以昨天注册了一个小程序“黑光技术”,现在申请还是比较方便的,不太好的一点就是要每次申请都要用一个不同的邮箱地址,我是用QQ邮箱的域名邮箱来做的,都是一个邮箱,每次申请就增加一个别名。
    做一个这样的一个小程序需要几个方面的配合:
    1)第一步就是申请一个小程序
    2)有一个blog,可以自己定制修改
    3)blog的feed和内容[……]

Read more

golang的httpserver优雅重启

去年在做golangserver的时候,内部比较头疼的就是在线服务发布的时候,大量用户的请求在发布时候会被重连,在那时候也想了n多的方法,最后还是落在一个github上的项目,facebook的一个golang项目grace,那时候简单研究测试了一下可以就直接在内部使用了起来,这段时间突然想起来,又想仔细研究一下这个项目了。
从原理上来说是这样一个过程:

    1)发布新的bin文件去覆盖老的bin文件
    2)发送一个信号量,告诉正在运行的进程,进行重启
    3)正在运行的进程收到信号后,会以子进程的方式启动新的bin文件
    4)新进程接受新请求,并处理[......]

Read more

nginx+php站点配置https

    今天准备搞一个小程序测试一下,结果发现如果要链接我的站点,那就必须要站点支持https。所以就顺便鼓捣一下把站点升级一下,增加https的访问支持。
    首先解决的就是证书问题,一个个人blog就没有必要买证书了,发现证书老贵老贵的。所以找了找免费证书,最后发现腾讯云提供的还是比较好的,很方便申请,这里https://buy.cloud.tencent.com/ssl 直接选择免费证书,输入自己的域名就可以申请了,再按照他的流程就可以生效了,最后下载下来就可以用了。阿里云说是有,但是我的申请界面没有看到,所以没法用。
    这里记录一下在nginx+php网站怎么折腾的。

[……]

Read more

lex和yacc 学习笔记

    前一段时间在项目中要使用一个规则表达式计算的功能,而且想可以任意扩展计算功能,比如计算AUB,A和B都表示一个号码包,计算并集,当然实际使用的公式会更为复杂,这里举例说明。在计算时候要判断如果A包已经计算ok了就可以使用A包,如果没有计算成功就需要发起计算并且等待计算成功,B包也是要同样的处理过程,最后再计算并集。当然这样一个功能自己定义写肯定是没问题的,但是还要想到后面的扩展性和程序代码可移交等问题,还是想有一个通用的方法来解决,所以在最后想到了使用yacc和lex来组织解决。实际上后来发现用yacc和lex非常方便的可以解决这类问题,而且在扩展性上非常好。所以想这里先总结一下yac[……]

Read more

如何使用Swagger编写API文档

    最近在梳理内部系统的架构设计,而且前端时间也在kindle上看了一些国外开发在API的架构设计上的一些思考。所以就想着我们内部系统的api也应该梳理梳理了。
    目前内部使用golang开发是重头,基本上的服务和调度都是使用golang来开发,而且内部模块之间的调用都是http的接口。而且目前golang1.8已经默认支持了http2的协议,在效率上以前顾虑的问题,现在都有所缓解,所以把这块的梳理重点放在了http接口的梳理上。
    重点看了soap,json-rpc,restfull。在梳理中发现一个比较有意思的东东,叫 Swagger,中文名字也比较有意思:丝袜哥,[……]

Read more

ElasticSearch5.2.2安装坑记录

部署完成ES之后,如果我们不修改配置,那么默认只有本机可以访问ES的api接口,如果需要给外部机器访问,那么就需要修改ES的配置了。

在默认情况下,ES只允许本地访问api接口,如果我们希望在另外一台机器上访问ES的接口的话,需要配置主机地址:
/data/elasticsearch-5.2.2> vim config/elasticsearch.yml

#network.host: 192.168.0.1
network.host: 10.140.7.12

保存退出,重新启动es,一般都会报错,无法启动

[2017-03-16T10:51:23,168][I[……]

Read more

为游戏分析设计的分布式数据存储系统

本文是今年5月在中国云计算大会中的分享内容,主要是介绍腾讯游戏数据分析平台的一些后台架构设计和游戏分析思路。

在“大数据”相对泛滥的今天,我们看到很多讨论各种大数据架构、存储、工具、算法等等。但是大数据工具在具体应用场景中的计算各有不同之处,那在游戏数据分析中我们腾讯是怎么做的呢?本话题将简单介绍腾讯游戏数据分析系统的后台架构,并且主要介绍一个为游戏分析这类场景设计开发的的小型数据存储系统。

使用Spark分析网站日志

郁闷从昨天开始个人网站不断的发出告警504错误,登录机器看了一下是php-fpm报错,这个错误重启php-fpm后,几个小时就告警,快一年了都没什么问题,奇怪
[28-Sep-2016 11:53:19] NOTICE: ready to handle connections
[28-Sep-2016 11:53:19] NOTICE: systemd monitor interval set to 10000ms
[28-Sep-2016 11:53:26] WARNING: [pool www] server reached pm.max_children setting (5),[……]

Read more