Go语言中文网 为您找到相关结果 1071

SSMP 服务器加载测试工具 ssmperf

ssmperf 是 SSMP 协议的服务器基础加载测试工具。 使用

./ssmperf <address> [flags]
  -cacert=""        path to CA cert
  -cert=""          path to client cert
  -conn=100         number of client connections
  -count=10000      number of messages sent per connection
  -cpuprofile=""    write cpu profile to file
  -insecure=false   d...阅读全文

Golang 处理隐藏的空字符串编译时报错:illegal byte order mark

trim_test.go:479:11: illegal byte order mark println(" 民商法学院") 测试代码: func TestTrim(t *testing.T) { //因编辑器去除了此编码字符串,此处模拟字符 println(string('\uFEFF')+"民商法学院\n") println(strings.TrimSpace(string('\uFEFF')+"民商法学院\n")) } 需要将空字符串转换到16进制(FEFF): println(string('\uFEFF')+"民商法学院\n") println(strings.TrimSpace(strings.TrimPrefix(string('\uFEFF')+"民商法学院\n",strin...阅读全文

博文 2018-09-14 17:34:43 承诺一时的华丽

Golang 实现LRU算法

缓存文件置换机制是计算机处理缓存存储器的一种机制。 计算机存储器空间的大小固定,无法容纳服务器上所有的文件,所以当有新的文件要被置换入缓存时,必须根据一定的原则来取代掉适当的文件。此原则即所谓缓存文件置换机制。 缓存文件置换方法有: 先进先出算法(FIFO):最先进入的内容作为替换对象 最近最少使用算法(LFU):最近最少使用的内容作为替换对象 最久未使用算法(LRU):最久没有访问的内容作为替换对象 非最近使用算法(NMRU):在最近没有使用的内容中随机选择一个作为替换对象 type Lru struct { max int l *list.List Call func(key interface{}, value interface{}) cache map[interface{}]*l...阅读全文

博文 2019-08-29 11:33:03 howie_矜暮

goreplay-使用真实流量测试你的应用

场景:最近项目准备升级,其中一个步骤就是需要删除一些不再维护的gem,这样就会涉及大量代码的修改,除了增加测试覆盖率以外,最好能使用线上真实的流量来访问测试环境,然后通过newrelic更加详尽的捕捉潜在的错误。 那这里就涉及到流量分流或者流量复制的问题,而goreplay便是解决该问题的一个优秀的工具。 顾名思义,goreplay是基于go语言实现的,要在生产服务器上安装go环境。安装参考:https://golang.org/doc/install, 准备好go语言环境后,goreplay直接提供了编译好的版本,十分方便,直接解压即可,可参考以下步骤: wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor...阅读全文

go使用之-编译约束

1、背景 今天无意中看到一套代码,关于获取系统实时运行状况的开源库,里面没有任何关于系统选择,但是一个包下面,以不同系统名字结尾,例如*_linux.go,*_darwin.go结尾,而且文件内的方法又是同名,众所周知,go的同一包下面,如果方法同名是会报错的,于是乎特别好奇, why? 2、解决疑惑-构建约束 带着疑惑,我去网上搜了一下,了解到了一个新的名词 : build constraints(构建约束),其实这个在c++里面还是经常会看到,但是作为一个go开发者,现在才知道🤦‍♀ 。️看官方解释: 里面清除描述了,编译便签(build tags 勉强翻译哈),可以让你在构建的时候自动选择那些文件编译,那些文件不编译,并且不止作用于go文件,如果要用,就必须出现在在文件开头,而且之后还...阅读全文

博文 2019-06-16 21:04:21 toms

Go 中 io 包的使用方法

前言 在 Go 中,输入和输出操作是使用原语实现的,这些原语将数据模拟成可读的或可写的字节流。为此,Go 的 io 包提供了 io.Reader 和 io.Writer 接口,分别用于数据的输入和输出,如图: Go 官方提供了一些 API,支持对内存结构,文件,网络连接等资源进行操作本文重点介绍如何实现标准库中 io.Reader 和 io.Writer 两个接口,来完成流式传输数据。 io.Reader io.Reader 表示一个读取器,它将数据从某个资源读取到传输缓冲区。在缓冲区中,数据可以被流式传输和使用。如图: 对于要用作读取器的类型,它必须实现 io.Reader 接口的唯一一个方法 Read(p []byte)。换句话说,只要实现了 Read(p []byte) ,那它就是一个...阅读全文

博文 2018-07-11 11:34:44 simon

Golang bytes.buffer详解

Buffer 介绍 Buffer 是 bytes 包中的一个 type Buffer struct{…} A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use. (是一个变长的 buffer,具有 Read 和Write 方法。 Buffer 的 零值 是一个 空的 buffer,但是可以使用) Buffer 就像一个集装箱容器,可以存东西,取东西(存取数据) 创建缓冲器 func main() { buf1 := bytes.NewBufferString("hello") buf2...阅读全文

博文 2019-01-28 15:34:49 小马哥_Magical

利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路

目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台机器出现了服务故障,那么流量有概率会打到这台机器导致出现服务不可访问的故障,这时候往往需要人工介入将故障的节点ip剔除掉,那么有没有好的办法发现故障Ip剔除?可以利用zookeeper的特性来干这个事情的 zookeeper是什么? Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,目前是基于这个思路去考虑的。大体的结构图: 具体思路 看到上面的树状结构大家应该想到了点上面东西了吧!那么服务自动发现具体可以这么做呢,这么利用zookeeper的这个特性去实现服...阅读全文

1.Golang的Http源码阅读(http协议)

解释服务器的几个概念: Request 用户请求的信息 Response 服务器返回的信息 Conn 用户的每次请求链接 Handler 处理请求和生成返回信息的处理逻辑 先写个小程序看看 func MyConn() { // 监听9090端口 listener, _ := net.Listen("tcp", "localhost:9090") defer listener.Close() // 建立用户请求的连接 conn, _ := listener.Accept() defer conn.Close() // 读取Request的内容 buff := make([]byte, 10000) len, _ := conn.Read(buff) fmt.Fprintln(os.Stdout...阅读全文

博文 2018-07-26 10:35:00 geange

通过搭建wordpress博客来学习云服务器的详细使用方法

云服务器越来越普及,很多企业及个人都纷纷上云,从传统的虚拟主机或者托管服务器上把网站和应用迁移到腾讯云、阿里云、百度云等这些云服务器上。云服务器相比传统服务器的优势有很多,比如安全性、性价比、稳定性、可用性、便捷性等等各方面,大家可以百度自己了解,我就不在这里多说了。虽然云服务器就这么多的优点,但真正会用,能用好的站长朋友们还不是很多,今天,就由提供阿里云、腾讯云1折秒杀活动的“尊托云数-9i0i.com”带着新手站长们,来通过搭建wordpress博客来学习云服务器的详细使用方法:首先,我们从云服务器的选购开始,建议选择的云服务商:阿里云、腾讯云、华为云、百度云,因为这些大的品牌能让你免除后顾之忧,持续经营你的网站,如下图:在选购云服务器时,有区域、CPU、内存、带宽、系统镜像这几个要素需...阅读全文

seelog源码阅读【笔记】

最近被后台日志弄的很烦,看到有个项目简简单单,又能满足需要,顺便试下看看效果,做下记录。只是记录下一部分内容,就不全部读了,关于源码可以去https://github.com/xmge/seelog。 结构设计 // websocket客户端 type client struct { id string socket *websocket.Conn send chan []byte } // 客户端管理 type clientManager struct { clients map[*client]bool broadcast chan []byte register chan *client unregister chan *client } WebSocket 是 HTML5 开始提供的...阅读全文

如何设计一个微型分布式架构?

序言(初衷)设计该系统初衷是基于描绘业务(或机器集群)存储模型,分析代理缓存服务器磁盘存储与回源率的关系。系统意义是在腾讯云成本优化过程中,量化指导机房设备扩容。前半部分是介绍背景,对CDN缓存模型做一些理论思考。后半部分会实际操作搭建一个微型但是五脏俱全的分布式通用系统架构,最后赋予该系统一些跟背景相关的功能,解决成本优化中遇到的实际问题。缓存服务器存储模型架构(背景): 图1 存储模型腾讯CDN的线上路由是用户à分布于各地区各运营商的OC->SOC->SMid->源站。各个层级节点部署的都是缓存服务器。来自用户的部分请求流量命中服务器,另一部分产生回源流量。随着业务带宽自然增长,用户端带宽增长,假设业务回源率不变的情况下,磁盘缓存淘汰更新(淘汰)速率变快,表现为以下业务瓶颈(iowait...阅读全文

博文 2018-09-21 16:34:47 Java架构解析

Flask实例-笔记应用Qotes

本文为《爬着学Python》系列第十二篇文章。 本来打算周更的,鸽了好几个星期。原因一个是面向对象那篇实在有点难写,另一个是我去弄了个Web项目-Qotes。之前跟着书和实验楼的在线课试过几次Flask,这次是真正的实战。 体验还算不错。 于是本专题说好了讲爬虫的,结果第一个大实践内容是web项目实战。本文就算在介绍Flask框架之前先给个实例,以后根据此实例展开讲细节吧。 Qotes开发初衷 再贴一下链接Qotes。 其实项目的开发初衷在网站中写了。我本来在简书写这个专题是为了整理知识的,因为简书的Markdown编辑器很好用。但是我后来发现一个问题,简书采取了笔记类应用的文档管理方式,就是一个笔记簿里面可以加一篇篇的笔记,但是笔记里面不能再加笔记,也不能在笔记簿里面再创建笔记簿。这给我带...阅读全文

博文 2017-10-09 10:05:01 SyPy

Golang——socket

socket 图片.png 客户端代码 package main import ( "bufio" "fmt" "io" "net" "time" ) func main() { var tcpAddr *net.TCPAddr tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999") conn,err := net.DialTCP("tcp",nil,tcpAddr) if err!=nil { fmt.Println("Client connect error ! " + err.Error()) return }else { fmt.Println(conn.LocalAddr().String() + "客户端连接成功!") } d...阅读全文

博文 2019-04-05 02:34:39 羊羽share

import中的引用问题

在import中引用的有三种,一种自带的包(比如fmt等) 还有一种GitHub中,放在src/github.com下面 其他的引用,get下来的一般都在src下面新建的一个文件夹,放在里面。 这只不过是一个路劲,能找到就好 同理: 也可以引用自己写的代码 比如我自己遇到的一个问题。 去获取 go get golang.org/x/net/html 无法获取怎么办 直接上GitHub中找到这个文件,下载下来, 放到本地的src目录中,去试试引用 如果是网上下的项目,先编辑器打开,go build一...阅读全文

博文 2018-07-20 09:34:50 哆啦在这A梦在哪

Spring Boot 学习系列(05)—自定义视图解析规则

此文已由作者易国强授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。自定义视图解析 在默认情况下Spring Boot 的MVC框架使用的视图解析ViewResolver类是ContentNegotiatingViewResolver,这个解析器比较智能,它会根据你的请求类型(一般以请求uri的后缀来区分或请求头的Accept得到)来自动选择返回的数据文档类型。 一般情况下,这个能满足大部分人的使用需求,但我们这里只是需要提供RESTful接口的话,那么这个解析规则就不太适合我们了,比如说我们的心跳检测controller中如果返回的是非字符串类型的数据(字符串默认是可以解析成功的),那么就会提示解析失败的错误, 或如下的异常信息:org.springframework....阅读全文

博文 2018-10-31 16:34:54 网易云社区

Go编程基础4-Http服务器

1、http服务器 package main import( "net/http" "log" ) func main(){//注册某个函数专门响应某个路由"/",函数签名符合 http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request){ w.Write([]byte("Hello,this is version 1!")) }) http.HandleFunc("/bye",sayBye) log.Println("Starting server ... v1") log.Fatal(http.ListenAndServe(":4000",nil)) } func sayBye( w http.ResponseWriter...阅读全文

博文 2018-07-09 15:35:29 1350368559

【go】用Golang的 http 包建立 Web 服务器

web.go package main import ( "fmt" "log" "net/http" "strings" ) func sayhello(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数, 默认是不会解析的 fmt.Println(r.Form) //这些是服务器端的打印信息 fmt.Println("path", r.URL.Path) fmt.Println("scheme", r.URL.Scheme) fmt.Println(r.Form["url_long"]) for k, v := range r.Form { fmt.Println("key:", k) fmt.Println("v...阅读全文

博文 2017-09-13 05:30:01 richerdyoung

Android OKHttp系列5-ConnectInterceptor

文章将会被同步至微信公众号:Android部落格 Android OKHttp系列皆为本人原创文章,未经允许严禁转载 概述 选定连接接口,并开始连接目标 流程图如下: okhttp-ConnectInterceptor.jpg 原图片地址:http://i66.tinypic.com/rjqglx.jpg 1、找RealConnection 选择合适的HttpCodec,为什么要选择呢?因为涉及到Http版本的问题,此处需要兼容,先看代码: boolean doExtensiveHealthChecks = !request.method().equals("GET"); HttpCodec httpCodec = streamAllocation.newStream(client, cha...阅读全文

游戏分布式服务器 gonet

gonet 游戏服务器架构,mmo架构,分布式snowflake64为整形uuid,ai行为树,配置data,游戏大部分都在内存运算,分布式缓存redis。设计之初,建立在actor模式下的;rpc,以及消息驱动,rpc无需注册,支持int,数据,struct(struct必须要注册结构题即可);sql封装简单的orm,具体看demowebsocket模式下,要在net,websocket注视掉如下代码:https://studygolang.com/articles/14842代码除了mysql,protobuf,redis这几个第三方库以外,其他都是自己写的,方便性能和修改,主动权在自己手里服务器之间rpc,客户端服务器之间protobuf + rpc,客户端tcp遵从如下消息包头前四位...阅读全文

博文 2019-03-11 19:34:45 bobohume

用 Go 来了解一下 Redis 通讯协议

用 Go 来了解一下 Redis 通讯协议 Go、PHP、Java... 都有那么多包来支撑你使用 Redis,那你是否有想过 有了服务端,有了客户端,他们俩是怎样通讯,又是基于什么通讯协议做出交互的呢? 介绍 基于我们的目的,本文主要讲解和实践 Redis 的通讯协议 Redis 的客户端和服务端是通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾(这是一条约定) 协议 在 Redis 中分为请求和回复,而请求协议又分为新版和旧版,新版统一请求协议在 Redis 1.2 版本中引入,最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式 本文是基于新版协议来实现功能,不建议使用旧版(1.2 挺...阅读全文

博文 2019-06-07 23:42:48 EDDYCJY

紧急求问 udp问题

请教一个问题:我多个硬件设备通过udp跟服务器连接,他会隔1小时给服务器去上报数据 每个设备是有唯一的标识码IMEI 现在想通过服务器把数据发给指定设备 该怎么操作 之前的做法是 当设备连接服务器时就把UDPAddr的对象存到一个map里 key值为imei号 但是设备连着 第二次发报文后 ip是不会变的 端口变了 我想用WriteToUDP 就找不到接受对象...阅读全文

Rabbitmq 简单介绍,安装和go客户端使用

Rabbitmq 简单介绍,安装和go客户端使用 1,消息队列介绍 1.1 什么是消息队列? 消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。消息队列,一般我们会简称他为MQ(Message Queue),消息队列可以简单的理解为:把要传输的数据放在队列中 说明: Producer:消息生产者,负责产生和发送消息到 Broker; Broker:消息处理中心。负责消息存储、确认、重试等,一...阅读全文

博文 2019-09-14 00:03:10 铁血军人

TCP连接的状态变迁

全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。 共有的:(1)CLOSED (2)ESTABLISHED 。 ![image.png](https://static.studygolang.com/190222/c1b69cd34b964ea79036a1f00b187f9f.png) 状态变迁 1、建立连接时的状态变迁 一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN...阅读全文

本地跨域请求服务器调试

在网页开发的过程中,时常需要进行跨域请求,去测试服务器请求数据。 跨域限制是浏览器行为,不是服务器行为 要理解和解决跨域问题,需要深刻理解-跨域限制是浏览器行为,不是服务器行为。这也是为什么跨域通过postman这类工具来直接请求服务器接口数据,而在网页中通过js就不可以的原因,因为js运行在浏览器,当js运行的环境url和请求的接口数据的url不同域,并且服务器没有允许跨域请求时,浏览器就会认为这个请求是不安全的,就会限制请求。 理解了跨域限制是浏览器行为,不是服务器行为的原理后,就很容易解决跨域问题了。有两种方法: 1、 服务器端后台代码进行特殊设置,允许客户端进行跨域请求 java private void enableCORS(Request request, Response re...阅读全文

Golang 心跳的实现

自: https://blog.csdn.net/lengyuezuixue/article/details/79235850 在多客户端同时访问服务器的工作模式下,首先要保证服务器的运行正常。因此,Server和Client建立通讯后,确保连接的及时断开就非常重要。否则,多个客户端长时间占用着连接不关闭,是非常可怕的服务器资源浪费。会使得服务器可服务的客户端数量大幅度减少。 因此,针对短链接和长连接,根据业务的需求,配套不同的处理机制。 短连接 一般建立完连接,就立刻传输数据。传输完数据,连接就关闭。服务端根据需要,设定连接的时长。超过时间长度,就算客户端超时。立刻关闭连接。 长连接 建立连接后,传输数据,然后要保持连接,然后再次传输数据。直到连接关闭。 socket读写可以通过 SetD...阅读全文

博文 2019-05-05 03:31:34 Jailman

go 语言开发环境的安装与配置

go 语言开发环境的安装与配置 编辑器选择 一直以来都是用sublime,但是听说sublime对于golang的插件支持并不是特别完善,并且VS Code只要在自身所带的扩展商店里安装go插件就可以自动配置很多实用的插件,比如gocode、godef等,非常方便啊,特别是这些插件因为GFW的原因,并不是那么好配置。 https://code.visualstudio.com/ 安装golang https://golang.org/doc/install 检查安装 go version 配置环境变量 GOROOT--------C:\Go\ GOPATH--------G:\GoWorks PATH添加------C:\Go\bin\ 检查环境 go env go插件安装 打开VS Cod...阅读全文

博文 2017-10-02 16:30:01 renleimlj

[转载]MMO网络游戏服务器中mysql数据库访问的性能优化探讨

问题: 和一些做mmo大型网络游戏服务器端的人讨论了一些mysql数据库访问的问题,因为我本人没有实际开发大型网游的经验,所以他们说的我也理解的不深,我还是努力理解,但还是觉得他们所谈的好象并不是那么一回事; mysql数据库的访问一般就通过他提供的c api接口访问就可以了,网络游戏服务器端事先和mysql建立并保持1个或者几个连接,正常情况下这些连接将一直保持; 为提高性能,网络游戏服务器程序启动后一般都会把事先需要的数据从数据库提取到内存供使用,以减少读数据库的频率,这到好理解; 当然,网游开发中,遇到需要立即写库或者更新库的内容时,我们会立即向数据库服务器发送insert,delete,update等以期望数据库能立即更新我们的数据,比如玩家切换到新地图,这种数据就有必要立即提交到数...阅读全文

博文 2019-01-01 12:34:45 Golang语言社区

Golang RabbitMQ Demo

AMQP协议 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。 RabbitMQ 就是 amqp 协议的Erlang的实现。 AMQP的模型架构的主要角色,生产者、消费者、交换器、队列。 生产者、消费者、服务节点 生产者(Producter) 消息投递方 消费者(Consumer) 消息接收方 服务节点(Broker) 消息的服务节点,基本上可以简单的把一个broker看成一台消息服务器 交换器、队列、绑定 绑定 Rabbitmq中需要路由键和绑定键联合使用才能使生产者成功投递到队列中去。 RoutingKey 生产者发送给交换器绑定的Key BindingKey 交换器和队列绑定的Key 生产者将消息投递到...阅读全文

博文 2019-12-17 15:32:40 hellocr

HTTP Proxy Demo 代码——华科云商

日常应用中使用过很多次代理,主要停留在配置级别。针对现在大数据公司来说,数据抓取对HTTP代理的应用就显得更为广泛,那么HTTP Proxy Demo具体有哪些示例?为了加深对http协议,代理模式的理解。咱么就以华科云商HTTP代理为列,详细讲解各种代码运用方式。代理官网:https://v.duoip.cn/customer/signup/?sale=xujinyang19911、Python #! -*- encoding:utf-8 -*- import requests # 要访问的目标页面 targetUrl = "http://ip.hahado.cn/ip" # 代理服务器 proxyHost = "ip.hahado.cn" proxyPort = "39010" # 代理...阅读全文

博文 2019-06-13 13:32:39 灰太狼_68a3

golang实现跨域访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/benben_2015/article/details/79247024 前端通过Ajax来获取服务器资源时,会存在跨域问题。因为Ajax只能同源使用(预防某些恶意行为),所以当访问不在同一个域中的资源时,就会出现跨域限制。尤其在开发和测试时,跨域问题会给前端测试带来非常不便。 不过CORS(Cross-Origin Resource Sharing,跨域资源共享)解决了这个问题,它背后的基本思想是:使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是否应该成功。CORS需要浏览器和服务器同时支持。整个CORS通信过程,浏览器是自动完成,而服务器需要手动配置。 ajax.htm...阅读全文

博文 2019-01-29 14:31:37 benben_2015

优雅地使用命令行:Tmux 终端复用

什么是 Tmux 你是否曾经开过一大堆的 Terminal?有没有把它们都保存下来的冲动?Tmux 的Session就是做这件事情的! 你可以随时退出或者进入任何一个 Session。每个 Session 有若干个 Window,每个 Window 又可以分成多个窗格(Pane)。 极大地满足 Terminal 用户的需求。 此外即使 Terminal 意外关闭也没关系,因为 Session 完全保存在 Tmux Server 中。 再次打开 Terminal 时只需$ tmux attach便可回到你的工作区,就像从未退出过一样。 同时 Tmux 还支持“远程协助”,原本在服务器中,大家ssh上去之后都是互不干扰的操作,如果进入了相同的 Tmux Session,所有人看到的画面都是一样的...阅读全文

Golang学习笔记5——数组array

1.array的定义 定义数组的格式: var a[4]int //元素自动初始化为零 a := [...]int{19:1} //编译器按照初始化值数量确定数组长度 a := [5]int{1,2} //未提供初始值的元素自动初始化为零 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 数组在go中为值类型 2.数组指针和指针数组 //数组指针是指获取数组变量的地址。 //此时变量p就是指向数组的指针。特别注意p定义的类型为长度为100的数组的指针。 长度必须相等才能赋值。 func main() { var a = [...]int{99:1} var p *[100]int = &a fmt.Println(p) } //指针数组是指元素为指针类型的数组 func main(...阅读全文

博文 2017-10-25 16:00:05 marks-gui

基于2PC和延迟更新完成分布式消息队列多条事务Golang版本

背景 分布式多消息事务问题 在消息队列使用场景中,有时需要同时下发多条消息,但现在的消息队列比如kafka只支持单条消息的事务保证,不能保证多条消息,今天说的这个方案就时kafka内部的一个子项目中基于2PC和延迟更新来实现分布式事务 2PC 2PC俗称两阶段提交,通过将一个操作分为两个阶段:准备阶段和提交阶段来尽可能保证操作的原子执行(实际上不可能,大家有个概念先) 延迟更新 延迟更新其实是一个很常用的技术手段,简单来说,当某个操作条件不满足时,通过一定手段将数据暂存,等条件满足时在进行执行 基于2PC和延迟队列的分布式事务实现 系统架构 实现也蛮简单的, 在原来的业务消息之后再添加一条事务消息(事务消息可以通过类似唯一ID来关联到之前提交的消息), worker未消费到事物提交的消息,就...阅读全文

博文 2019-05-18 11:34:37 仔仔

golang中crypto/elliptic包

elliptic包实现了几条覆盖素数有限域的标准椭圆曲线。 type Curve type Curve interface { // Params返回椭圆曲线的参数 Params() *CurveParams // IsOnCurve判断一个点是否在椭圆曲线上 IsOnCurve(x, y *big.Int) bool // 返回点(x1,y1)和点(x2,y2)相加的结果 Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int) // 返回2*(x,y),即(x,y)+(x,y) Double(x1, y1 *big.Int) (x, y *big.Int) // k是一个大端在前格式的数字,返回k*(Bx,By) ScalarMult(x1, y1 *bi...阅读全文

博文 2018-12-09 14:34:43 laijh

Go 每日一库之 carbon

简介 一线开发人员每天都要使用日期和时间相关的功能,各种定时器,活动时间处理等。标准库time使用起来不太灵活,特别是日期时间的创建和运算。carbon库是一个时间扩展库,基于 PHP 的carbon库编写。提供易于使用的接口。本文就来介绍一下这个库。 快速使用 第三方库需要先安装: $ go get github.com/uniplaces/carbon 复制代码后使用: package main import ( "fmt" "time" "github.com/uniplaces/carbon" ) func main() { fmt.Printf("Right now is %s\n", carbon.Now().DateTimeString()) today, _ := carbo...阅读全文

博文 2020-02-16 10:34:15 darjun

使用sublime打造go语言的开发环境

工欲善其事,必先利其器。作为一个码农,编辑器是我们每天用的最多的工具。那么怎么构建一个go语言环境的编辑器呢?因为习惯轻量的sublime,不太喜欢繁重的IDE,就将自己的sublime编辑器打造为适合go语言开发的IDE。sublime是一个高度定制化的编辑器,有强大的插件管理平台,并内置了宏操作和python语言进行插件开发,通过这些,可以打造出复合我们习惯的IDE工具。在这篇文章中,将基于现有插件平台的提供的插件,进行配置。 sublime安装 根据自己的系统选择安装sublime 下载地址 安装Package Control 按下快捷键ctrl+` 在底部的控制台中输入以下代码,并回车 import urllib.request,os; pf = 'Package Control.s...阅读全文

博文 2019-08-10 14:02:47 暮雨

Spring Boot(十三)RabbitMQ安装与集成

一、前言 RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列,异步接收和发送消息,MQ的全程是:Message Queue中文的意思是消息队列。 1.1 使用场景 削峰填谷:用于应对间歇性流量提升对于系统的“破坏”,比如秒杀活动,可以把请求先发送到消息队列在平滑的交由系统去处理,当访问量大于一定数量的时候,还可以直接屏蔽后续操作,给前台的用户友好的显示; 延迟处理:可以进行事件后置,比如订单超时业务,用户下单30分钟未支付取消订单; 系统解耦:消息队列也可以帮开发人员完成业务的解耦,比如用户上传头像的功能,最初的设计是用户上传完之后才能发帖,后面有增加了经验系统,需要在上传头像之后增加经验值,到后来又上线了金币系统,上传头像之后可以增加金币,像这种需求...阅读全文

博文 2018-11-13 13:34:41 王磊的博客

图片服务器那些处理方案。

现在傻梦兽的服务器架构如下 image.png 看到这里你们会发现一个问题就是,安流量计费。只有两台主机是有宽带,其余都是内网通信。 如果文字传输的话,流量并不算大,可以这么处理。可是图片过多的时候,如果有资本的企业选择肯定是七牛云之类的服务,因为这里服务包含了(分布式、CDN、还有负载等一系列的功能),可是这类服务如果一不小心的话,超出流量那就只能喊爸爸了。 那么我们一般的小企业是如何处理这一个问题的呢?比如我现在的再搞一台固定宽带的服务器做图片服务,然后在第一个代理服务器nginx服务器中配置如下 location ^~ /upload { proxy_pass http://192.168.1.15; proxy_set_header Host $host; proxy_set_hea...阅读全文

博文 2019-12-11 06:32:42 傻梦兽

在eclipse中安装go编辑器阅读fabric代码

参考资料 由于fabric采用go语言编写,故需要安装go环境。 安装要求: Java VM version 8 or later. Eclipse 4.6 (Neon) or later. 1. JDK安装1.8以上+Eclipse 安装过程省略 2.安装go环境 https://golang.org/ 进入go的官网,下载对应的安装包。本例子下载的是go1.8.3.windows-amd64.zip 解压到E:\fabric\go目录。 3.在eclipse中安装GoClipse help->Eclipse Marketplace->检索GoClipse,检索到以后直接安装即可 安装后重...阅读全文

博文 2017-07-05 16:00:06 maobuji

[译] 使用 Go 和 ReactJS 构建聊天系统 (一)

本节完整代码:GitHub 我们将通过设置两个项目来开始这个课程。一旦我们完成了枯燥的设置,就可以开始添加新功能并构建我们的应用程序,将看到一些积极的结果! 目标 在这部分课程结束后,你将掌握: 在 backend/ 目录里创建基本的 Go 应用 在 frontend/ 目录里创建基本的 ReactJS 应用 通过实现这两个部分,你将能够在接下来的几节课程中为聊天系统添加一些功能。 准备工作 为了完成本系列教程,我们先要做以下的准备工作。 需要安装 npm 需要安装 npx。这个可以输入 npm install -g npx 安装。 Go 语言版本需要满足 1.11+。 需要一个代码编辑器来开发这个项目,例如 VS 设置 Go 后端项目 如果你熟悉 Go 的话,这一步非常简单,我们首先要在项...阅读全文

博文 2019-08-02 14:34:31 咔叽咔叽

RabbitMQ系列笔记介绍篇

导语 rabbitMQ是市面上应用很广的一种应用间传送数据的通信方式,是由erlang语言开发,主要特点就是异步通信,实现服务与服务之间的解耦。特点可靠性:提供了持久化、传输时确认、发布时确认、跟踪机制灵活的路由:有四种交换器负责分发路由集群:支持集群多种协议:支持STOMP、和MQTT协议多语言:支持大部分流行语言友好的界面:提供了直观的管理界面可扩展:提供了许多插件。应用场景高并发排队机制:比如在秒杀场景,提示用户正在等待,在队列里存放了有序的待处理的消息,而不是所有的消息杂乱无章服务之间的解耦:服务之间可通过发布订阅的模式,让Rabbitmq队列通知订阅了该消息的服务执行相关代码。工作机制在其通信的过程中,有两个重要的角色,分别是生产者和消费者,需要强调的是RabbitMQ服务器并不产...阅读全文

博文 2019-08-10 16:32:49 陌无崖

Golang 网络编程丝绸之路 - TCP/UDP 地址解析

TL;DR 在使用 Golang 编写 TCP/UDP socket 的时候,第一步做的就是地址解析。 func ResolveTCPAddr(network, address string) (*TCPAddr, error) func ResolveUDPAddr(network, address string) (*UDPAddr, error) 下面是对这两个函数的源码分析。 ResolveTCPAddr 该函数返回的地址包含的信息如下: // src/net/tcpsock.go type TCPAddr struct { IP IP Port int Zone string // IPv6 scoped addressing zone } TCPAddr 里,IP 既可以是 IP...阅读全文

博文 2019-06-08 23:32:43 LeonHuayra

从nginx热更新聊一聊Golang中的服务器热更新(上)

静态语言在服务器编程时都会遇到这样的问题:如何保证已有的连接服务不中断同时又升级版本?最近花了点时间看了下nginx热更新代码流程,想了下结合之前的经验一并总结下热更新1. 热更新是什么?简单翻译成人类可读的实例是如下这个样子:举个例子,你现在在坐卡车,卡车开到了150KM/H然后,有个轮胎,爆了然后,司机说,你就直接换吧,我不停车。你小心点换嗯。就这个意思2.网关中的热更新服务程序热更新这个问题在层7网关中尤其严重,网关中承载着大量的请求,包括HTTP/HTTPS短连接、HTTP/HTTPS长连接、甚至是websocket这种超长连接(websocket通常连接时间会很长,十几分钟到几天不等)。这样的话我们势必不能讲服务程序停止再启动的冷更新,服务进程热更新是非常有必要的。网关作为一个基础...阅读全文

博文 2019-03-18 14:09:39 Lateautunm​

19年第34周:Go 搭建迷你服务器

一,效果 服务器返回了一张图片 二,Golang代码 package main import ( "fmt" "./models" "log" "net/http" ) func main(){ // 1, 迷你服务器 http.HandleFunc("/", handler) // 注册函数 类似于 路由管理 urls.py http.HandleFunc("/sanhuo", handlerLisa) // 注册函数 log.Fatal(http.ListenAndServe("localhost:8000", nil)) // 服务器启动 } // 1, "/" 的回调函数 类似于Django的 视图 views.py func handler(w http.ResponseWrite...阅读全文

博文 2019-08-22 02:32:46 习惯研究所所长

安装 golang 最简易教程

1. 安装 golang到 golang.org 官网下载最新版的golang, Leanote至少需要golang 1.7。如果被墙, 可以在 http://golangtc.com/download 下载。以下为 1.8 版本的快速下载链接:linux 64位: http://www.golangtc.com/static/go/1.8/go1.8.darwin-amd64.pkglinux 32位: http://www.golangtc.com/static/go/1.8/go1.8.linux-386.tar.gz假设将文件下载到 /home/user1 下, 解压文件:$> cd /home/user1$> tar -xzvf go1.6.linux-amd64.tar.gz在 ...阅读全文

博文 2018-09-13 13:34:39 麦子时光_新浪微博

Go基础学习记录之Session和Cookie

Session和Cookie session和cookie是两个非常常见的Web概念,也很容易被误解。但是,它们对于页面授权以及收集页面统计信息非常重要。我们来看看这两个用例。 假设我们要抓取限制公共访问的页面,例如Twitter用户的主页。当然,您可以打开浏览器并输入用户名和密码来登录和访问该信息,但所谓的“网络爬行”意味着我们使用程序自动执行此过程而无需任何人为干预。因此,当我们使用浏览器登录时,我们必须找出幕后的真实情况。 当我们第一次收到登录页面并输入用户名和密码时,按下“登录”按钮后,浏览器会向远程服务器发送POST请求。服务器验证登录信息并返回HTTP响应后,浏览器重定向到用户主页。这里的问题是,服务器如何知道我们拥有所需网页的访问权限?由于HTTP是无状态的,因此服务器无法知道...阅读全文

博文 2018-10-24 15:34:47 DurbanZhang

学习Go语言第一周的感受

学习Go语言第一周的感受 一、 首先,由于生活中的所需,需要对go语言进行一套系统的学习,下面就是学习过程的几种情况: 1.书籍,主要看了《学习 Go 语言(Golang)》,《go语言编程》这两本适合团队开发中,在较短的时间下,熟悉语言的语法,以及代码举例、思考学习; 《Go语言圣经》这本适合对语言在语法熟悉了以后时间比较宽裕,或者对自己要求较高的条件下需要看的(内容比较详细,也穿插的有需要的看)。 2.视频,单纯的书籍学习,会使大脑变的麻木,疲倦,结合着别人的讲解,以及图画给自己形成二次记忆,以及举一反三 3.刷题,新的知识的吸收程度需要一个考核,来检验自己的成果 4.项目,每个版块学懂以后进行相应的小项目,这样会让对语法和编程习惯有更好的理解和更好的开发效率 5.开源社区,开源项目:是...阅读全文

博文 2019-02-19 14:32:41 IT_model

Rboot 文档--简介

Rboot 助手机器人 =================================================================== * ________ ____ ____ ____ ______ ________ ____ ______ * * ___/ __ \/ __ )/ __ \/ __ \/_ __/ ___/ __ )/ __ \/_ __/ * * __/ /_/ / __ / / / / / / / / / __/ __ / / / / / / * * _/ _ _/ /_/ / /_/ / /_/ / / / _/ /_/ / /_/ / / / * * /_/ |_/_____/\____/\____/ /_/ /_____/\____/ /...阅读全文

16.Go语言标准库之文件操作

1.打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File和一个err。 对得到的文件实例调用close()方法能关闭文件。 package main import ( "fmt" "os" ) func main() { file,err := os.Open("main.go") if err != nil{ fmt.Println("open file failed!err:",err) return } //为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句 file.Close() } 结果: open file failed!err: open main.go: no such file or directory Process finished w...阅读全文

博文 2020-02-07 13:33:12 DevOperater