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

GO语言的开源库

Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org gowalker gosearch Sourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail to adg@golang.org from your Google Account. Dead projects If you find a project in this list that is ...阅读全文

博文 2015-02-16 09:47 chu888chu888

Thrift RPC 使用指南实战(附golang&PHP代码)

Thrift RPC 框架指南 认识Thrift框架 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。 thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 类似Thrift的工具,还有Av...阅读全文

博文 2015-05-13 17:44 grassroots2011

基于Go实现的分布式MQ

基于Go实现的分布式MQ 2015-09-14 赵超 讲师:赵超(Beta版厨子3.0) 个人简介: 6年的Java开发经验、先后就职于淘宝Java中间件团队、腾讯无线媒体产品部。现就职于陌陌担任基础业务组主管。专注于分布式消息总线、LBS技术领域、golang在大规模生产换环境应用的探索。 今天交流的内容也是我上半年主要做的一个开源的MQ的项目,希望对大家有帮助 一、RPC与MQ之间对比 我们通常接触到的RPC同步调用的种类非常多比如fb 的thrift/阿里的dobbo 腾讯的taf、淘宝的hsf这类同步调用框架 从图里面可以看到作为一个业务完成后端要发生非常多的RPC通信 随着业务的复杂度提高,各服务间的依赖度也逐步加大,那么服务间的响应时间也就各有参差了 在一个请求链路上如果存在一个...阅读全文

博文 2015-09-15 00:57 zdy0_2004

使用consul实现分布式服务注册和发现

使用consul实现分布式服务注册和发现 七 06 bigwhite技术志 Airbnb, cluster, consul, docker, etcd, Go, Golang, haproxy, hashicorp, json, raft, SmartStack, ZooKeeper, 分布式系统, 强一致性, 服务发现, 服务注册, 选主 No Comments Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,比如 Airbnb的SmartStack等相比,Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如Zoo...阅读全文

golang:实现thrift的client端协程安全

前言 Golang作为我们服务端开发的主要语言,实现了很多基础服务,比如oauth2,账户系统,支付,客服等。而在早期开发阶段,也尝试使用golang做页面展示,但每种语言都有自己最擅长的领域,让golang来搞前端实在是有点疼,最终我们选择php+golang的方式来作为整体的服务架构。 那么问题来了,php和golang这对好基友如何愉快的玩耍呢?结论是thrift是块好肥皂! 抛砖 市面上肥皂一大堆,最著名的是舒肤佳,那么我们为毛不用舒肤佳,而选择thrift呢。。。因为够酸爽! 这种酸爽,只有牙口好,才能吃嘛嘛香。众所周知,thrift有多种型号(传输协议),比如家用型的TDebugProtocol,持久型TBinaryProtocol还有爆炸型TCompactProtocol。 而...阅读全文

博文 2014年10月17日 郝冠伟

golang rpc 简单范例

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 它的工作流程如下图: golang 使用 RPC的例子如下: 服务器端代码: 这里暴露了一个RPC接口,一个HTTP接口 package main import ( "fmt" "io" "net" "net/http" "net/rpc" ) type Watcher int func (w *Watcher) GetInfo(arg int, result *int) error { *result = 1 return nil } func main() { http.HandleFunc("/ghj1976", Gh...阅读全文

博文 2015-02-17 15:33 ghj1976

O2O,商城go2o

Go2o ================ # What's Go2o # Golang combine simple o2o DDD domain-driven design realization, including multi-channel (businesses), multi-store, multi-member commodity,Promotions, orders, coupons implementation also includes a mini-framework in package "ops/cf", providing ORM, Reporting, Web Framework,Rpc Framework. # Deploy # ##...阅读全文

开源项目 2014-12-22 10:01:04

Golang通过Thrift框架完美实现跨语言调用

每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序。 做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯。采用http协议简单,但性能不高。采用TCP通讯,则需要考虑封包、解包、粘包等等很多因素,而且想写个高效的TCP服务,也很难。 其实,对于此类需求,采用RPC(Remote Procedure Call Protocol)编程最靠谱。使用 RPC 编程被认为是在分布式环境中运行的客户机和服务器应用程序之间进行可靠通信的最强大、最高效的方法之一。 Golang内置了对RPC支持,但只能适用于go语言程序之间调用,且貌似序列化、反序列化性能不高。如果go语言能使用Thrift开发,那么就如虎添翼了。可惜,thrift虽然很早就包含了golang的代码,但...阅读全文

博文 2015-08-26 17:40 scut1135

Google 新实现的Protobuf RPC: grpc

自: http://www.dongliu.net/post/622450 Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的RPC 实现。 Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,于是存在着众多良莠不齐的第三方RPC 实现。 从实现和特性看来,grpc 更多的是考虑移动场景情况下客户端和服务端的通信,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 本身提供了连接多路复用、Body 和 Header 压缩等机制,grpc 基于此可以提供比较高效的实现。 grp...阅读全文

博文 2015-02-27 17:10 huangfox

Go语言异步服务器框架原理和实现

Go语言类库中,有两个官方的服务器框架,一个HTTP,一个是RPC。使用这个两个框架,已经能解决大部分的问题,但是,也有一些需求,这些框架是不够的,这篇文章,我们先分析一下HTTP 和 RPC服务器的特点, 然后结合这两个服务器的特点,我实现了一个新的服务器,这个服务器非常适合客户端和服务器端有大量交互的情况。 HTTP服务器的特点: HTTP的请求 和 响应的周期如下: 对于一个HTTP 长连接,一个请求必须等到一个响应完成后,才能进行下一个请求。这就是http协议最本质的特点,是串行化的。而这个特点保证了http协议的简洁性,一个请求中间不会插入其他的请求干扰,这样不需要去对应请求和响应。但是,同时也有个弱点,那就是不适合做大量的请求。举个实际中我们遇到的例子,我们要把大量的中国客户的订...阅读全文

博文 2013-08-05 14:58 niniwzw

go的rpc出现提示:method Xxx has wrong number of ins: 1

the way to go的$19.8和$19.9里面的demo:goto_5 $go version go version go1.1.2 darwin/amd64 $./goto_v5 -http=:8081 -rpc=true //启动master的时候,会显示下面一行提示: 2014/12/02 22:36:29 method Count has wrong number of ins: 1 func (s *URLStore) Put(url, key *string) error { for { *key = genKey(s.Count()) if err := s.Set(key, url); err == nil { break } } if s.save != nil {...阅读全文

博文 2014-12-02 22:52 wk3368

golang与java间的json-rpc跨语言调用

关于如何使用golang调用rpc和json-rpc,网上虽然有很多的帖子,但都仅仅是golang程序间通信,没有牵涉到跨语言调用的问题。在使用golang开发服务端程序的时候,不可避免的要与其他语言的程序进行交互,特别是json-rpc这的协议,本身就应该是用在不同的平台间的调用上的(因为golang程序间的交流已经有了封闭的用gob编码解码的rpc包了,我们自然而言的会想到用json-rpc来提供对其他语言的支持)。本文就来详细探究一下如何实现golang与java之间的json-rpc调用。 首先,实现一个基于socket的java调用golang的样例(这个方法不需要第三方golang库,但是仅能通过tcp协议通信。如果要通过http协议通信的话,必须自己写一个或者用第三方的库,后面...阅读全文

博文 2015-08-24 20:18 geomantic

Gorilla web toolkit—Go Web开发工具集

[Gorilla web toolkit](http://www.gorillatoolkit.org/) 提供了好几个Golang Web开发工具,本站就使到了一些,很不错。 工具列表: - [gorilla/context](http://www.gorillatoolkit.org/pkg/context) stores global request variables. - [gorilla/mux](http://www.gorillatoolkit.org/pkg/mux) is a powerful URL router and dispatcher. - [gorilla/reverse](http://www.gorillatoolkit.org/pkg/r...阅读全文

Go RPC Inside (client)

Go语言标准库能够自带一个rpc框架还是非常给力的,这可以很大程度的降低写后端网络通信服务的门槛,特别是在大规模的分布式系统中,rpc基本是跨机器通信的标配。rpc能够最大程度屏蔽网络细节,让开发者专注在服务功能的开发上面。下面介绍Go语言rpc框架的客户端内部实现. Go rpc客户端的逻辑很简单,大体上,就是将一个个的调用请求序列化后原子的发送给服务器,然后有一个专门的gorutine等待服务器应答,这个goroutine会将收到的每个应答分发给对应的请求,这就完成了一次rpc调用。 调用入口 func NewClient(conn io.ReadWriteCloser) *Client func (client *Client) Call(serviceMethod string, a...阅读全文

编写一个go gRPC的服务

前置条件: 获取 gRPC-go 源码 $ go get google.golang.org/grpc 简单例子的源码位置: $ cd $GOPATH/src/google.golang.org/grpc/examples/helloworld 复杂些例子的源码位置: $ cd $GOPATH/src/google.golang.org/grpc/examples/route_guide 写一个gRPC的服务,一般分下面几步: 在一个 .proto 文件内定义服务。 用 protocol buffer 编译器生成服务器和客户端代码。 使用 gRPC 的 Go API 为你的服务实现一个简单的客户端和服务器。 定义服务 在一个 .proto 文件中定义服务 简单的例子服务定义在: exampl...阅读全文

博文 2016-04-13 15:46 ghj1976

使用thrift作为go和C++中间rpc及问题(一)

这两天因为工作需要查了一些跨语言的rpc接口。我这里指的是包含序列化和tcp交互的。 主要查了一下以下三类: 1.ICE 这玩意不支持go,直接放弃。 2.GRPC,这玩意刚刚发布,还且全面使用C++11特性,我们生产环境目前还没升级,他依赖于protobuf 3.0.0版本,这个还是beta版,拿过来编译了下,依赖google的gmock。我的虚拟机上连不上去,只能暂时作罢。 3.Thrift,这个从0.9.1 就开始完美(官方)支持go语言了,那就拿这个操刀吧。 注:C++测试环境ubuntu12.04LTS 内核 3.2.0-23 GCC版本4.6.3 Go就在win7笔记本上跑的。 第一件事安装thrift,从官网下载最新thrift0.9.2版本。 编译安装参考 http://my...阅读全文

博文 2015-09-25 16:48 hgd7123

Google GRPC初试

GRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。 1 安装 go get google.golang.org/grpc 2 创建helloworld.proto syntax = "proto3"; option java_package = "io.grpc.examples"; package helloworld; ...阅读全文

博文 2015-04-21 17:12 jiangsoft

Go RPC Benchmark

这篇完成得太折腾了,为了更好的展示benchmark的一系列结果数据,我必须得找个软件将数据进行图表化。以前在windows上基本都用execel画曲线图、柱状图等,但在linux/mac上却找不到顺手的工具了。我也使用过gnuplot,这货不知道是太专业,还是太古老的原因,始终用得不顺手、不开心。于是,我就决定自己先用Go和chart.js库折腾了一个goplot工具来绘制图表,然后再才开始写这篇博客。 有人可能会说我又在折腾轮子了,确实是折腾了一个轮子。话说,这又怎么样呢?作为一个程序员,最大的优势就是自己用得不开心的工具,可以自己动手完善、甚至写一个新的。我认为一个geek程序员首先就是要学会不断的装备自己的工具库。不扯废话了,回归正题。 测试维度 这次benchmark主要以下两个维...阅读全文

博文 10 September 2013 skoo

Google 发布 gRPC 云微服务, - a HTTP/2 RPC

gRPC 是谷歌提供的一套 RPC 框架支持10种语言( C, C++, C#, Go,Java, Node.js, Objective-C, PHP, Python, Ruby)为手机应用提供后台云服务。 gRPC 语言是跨平台的RPC系统开发,并且在google内部的很多区域得到了应用其中包括云计算服务。并且提供公共的API gRPC 特点:低cpu开销,快速开发分布式系统(包括手机应用)和即时通讯等。 本人英语火候欠佳,只能简单概括一下 。文章摘自:http://www.infoq.com/news/2015/02/grpc 本人强烈推荐: http://www.infoq.co...阅读全文

博文 2015-02-28 10:47 summer-arvin

Google gRPC 简介

Google gRPC 简介 1. 简介 Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的RPC 实现。 其中github地址: https://github.com/grpc/grpc Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,于是存在着众多良莠不齐的第三方RPC 实现。 从实现和特性看来,grpc 更多的是考虑移动场景情况下客户端和服务端的通信,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 本身提供了连接多路复用、Body 和 Header 压缩等机制,...阅读全文

博文 2015-03-03 17:30 chenglinhust

基于Golang的游戏服务器框架cellnet开发日记(二)

看官们肯定还有大部分不是很熟悉Actor模型. 我这里基于Erlang, Skynet等语言和框架库来实战型解释下Actor模型. Actor概念 Actor模型和OO类似, 都是符合人的思维模式进行编码. OO里啥都是类, 用类来模拟对象, 解决所有的问题. Actor类似的使用Actor来模拟处理对象和单元 Actor在Erlang中叫进程(非操作系统进程), 在Skynet中叫svc(服务) Mailbox消息队列 每个Actor中包含有一个mailbox, 也就是邮箱. Actor自己只能通过收发mailbox与外界进行沟通, 也就是说, Actor之间只能通过消息进行互相交流, 不能采用其他形式. mailbox本身是一个顺序队列, 先进先出. 而且mailbox从理论上说没有上限...阅读全文

博文 2015-10-17 17:58 zangao

memcache、memcached、groupcache的区别

对PHP语言来说,PHP使用memcache有两个模块,分别叫memcache和memcached,他们的区别看下表: 参考:http://hi.baidu.com/tony_wd/item/605e959241f87c8c59146164 对其他场景来说: Memcache是这个缓存项目(http://memcached.org/)的名称,而memcached是它服务器端的主程序文件名 。 memcached作者Brad Fitzpatrick(布莱德·菲兹派翠克)用Go开发了前者的替代版:groupcache(https://github.com/golang/groupcache)。 groupcache与memcached的相似之处: 通过key分片,并且通过key来查询响应的pee...阅读全文

博文 2013-11-27 16:00 ghj1976

golang表单提交与服务器的交互

网络编程 socket,http,rpc,json处理 前端是Web+移动,后端是Linux(命令行centos)+开源 http编程 服务器和客户端(浏览器也是客户端) socket编程 rpc编程 ------------------------------------------------------------------------------server.go package main //服务端开发,特别是Web开发,基本上全是处理HTTP请求的处理。 //根据具体用途分为两种:Web页面开发和API接口开发。 //Web页面开发也完全可以看成是API接口开发,只是它的两个主要部分, //页面和ajax请求,一个是返回html,另外一个可以返回html,也可以返回其他格式的而...阅读全文

博文 2015-07-12 22:49 ice_201507

如何实现支持数亿用户的长连消息系统 | Golang高并发案例

360消息系统介绍 360消息系统更确切的说是长连接push系统,目前服务于360内部多个产品,开发平台数千款app,也支持部分聊天业务场景,单通道多app复用,支持上行数据,提供接入方不同粒度的上行数据和用户状态回调服务。 目前整个系统按不同业务分成9个功能完整的集群,部署在多个idc上(每个集群覆盖不同的idc),实时在线数亿量级。通常情况下,pc,手机,甚至是智能硬件上的360产品的push消息,基本上是从我们系统发出的。 关于push系统对比与性能指标的讨论 很多同行比较关心go语言在实现push系统上的性能问题,单机性能究竟如何,能否和其他语言实现的类似系统做对比么?甚至问如果是创业,第三方云推送平台,推荐哪个? 其实各大厂都有类似的push系统,市场上也有类似功能的云服务。包括我...阅读全文

博文 2016-01-18 16:52 RandyLeonard

golang HTTP ReadRequest

服务端收到client发送的Http数据后怎么解析成具体的Request对象呢?下面来看看golang是如何处理的 首先看一个具体应用实例:仅仅包含HTTP里面的Method,URL和Proto package main import ( "bufio" "fmt" _ "io" "net/http" "net/textproto" "strings" ) func main() { request() } //当然这个实例比较简单,仅仅是通过\n来解析出几个字段而已 func request() { paths := "/xxx" br := bufio.NewReader(strings.NewReader("GET " + paths + " HTTP/1.1\r\nHost: tes...阅读全文

博文 2015-11-11 17:48 golang_yh

Go RPC

什么是RPC? RPC是Remote Procedure Call的缩写,从字面意思理解就是远程过程调用,具体可以见维基百科的解释,如果你英文足够好可以看这里wikipedia,我的理解可以简单的用一句话来描述:RPC就是一个本地程序可以通过网络调用远程的一个子程序。 Go RPC Go的RPC中如果客户端是Go语言编写的则将用Go特有的Gob序列化,同时可以选择rpc/jsonrpc包来用json格式序列化以便和其他的RPC System交互。 Go中的RPC有以下几个限制: 1.Remote Procedure必须是公共的,对于Go的话函数首字母必须大写。 2.Remote Procedure必须又且仅有两个参数,第一个参数是一个指向从客户端接受的数据指针,第二个参数是一个指向返回给客户...阅读全文

博文 2013-04-26 12:52 wowzai

win下 golang 跨平台编译

mac 下编译其他平台的执行文件方式请参看这篇文章,http://www.cnblogs.com/ghj1976/archive/2013/04/19/3030703.html 本篇文章是win下的跨平台编译。 安装GCC编译器(MinGW) 我们需要GCC编译环境,这里我选择的是:MinGW。 mac 下安装了Xcode自动就带了GCC,win下没有,所以我们用MinGW这个最小化安装的GCC。 MinGW官网提供了一种自动在线下载安装的gui小程序,http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/ 。这个程序只需要简单的一步步跟着提示,就会自动下载每个组件的最新版本并且安装在电脑里面。 安装完成后,...阅读全文

博文 2013-07-06 22:49 ghj1976

Go语言中的RPC调用

首先,说一下目录结构: 一、HttpRPC 1、建立服务文件 /*Go RPC的函数只有符合下面的条件才能被远程访问,不然会被忽略,详细的要求如下: 函数必须是导出的(首字母大写) 必须有两个导出类型的参数, 第一个参数是接收的参数,第二个参数是返回给客户端的参数,第二个参数必须是指针类型的 函数还要有一个返回值error 举个例子,正确的RPC函数格式如下: func (t *T) MethodName(argType T1, replyType *T2) error */ package common import ( "errors" ) type Args struct { A, B float32 } type Result struct { Value float32 } typ...阅读全文

博文 2016-03-09 19:47 songxingzhu

终极 Web 应用性能和压力测试工具 Gor

常见的 Web 应用的压力测试工具 Web 应用压力测试工具有很多,比如 Apache ab,node-ab,Apache JMeter, LoadRunner, httperf。但是这些工具都没能解决一个问题: 如何正确模拟生产环境的流量 如今 Web 应用的架构变得非常复杂,内部包含复杂的各种负载均衡、 服务和 RPC 调用关系,简单的发送 GET 请求到某些 URL 或者 API 接口完全无法模拟真实的流量。假如回放 HTTP 日志,操作又异常麻烦。Tcpcopy 虽然能够复制实时流量,但是操作也很复杂。之前的 亚马逊云平台的迁移 就用到了 Gor 这个工具。 Gor 是 Web 应用压力测试的完美方案 我一直在找一个简单又方便的解决方案,直到找到了 Gor 。Gor 是用 Golan...阅读全文

博文 2015-06-11 09:07 xtqve

区块链开发(一)搭建基于以太坊go-ethereum的私有链环境

通过各方资料了解学习之后,决定自己开始搭建基于以太坊go-ethereum的私有链环境。由于本人的电脑系统为win8,为避免window环境出现过多莫名其妙的问题,特意通过vm搭建了一台ubuntu16.04版本的虚拟系统。以下内容均基于ubuntu16.04系统。 go-ethereum客户端 下载地址&参考手册 首先,可以查看一下go-ethereum项目在git上的地址: https://github.com/ethereum/Go-ethereum 、 可以在点击项目上的wiki标签,也可以通过一下地址访问wiki: https://github.com/ethereum/Go-ethereum/wiki/Building-Ethereum 在wiki页面选择ubuntu系统的安装说...阅读全文

博文 2016-11-07 11:38 wo541075754

Go RPC Inside (server)

说到rpc让我想起了刚毕业面试的时候,被问到是否了解rpc?我记得当时我的回答是“课本上学过rpc,只知道是远程过程调用,但没有用过,具体也不知道是什么”。的确,大学中间件这门课程里有讲到rpc,里面还引入了一个非常难理解的概念——“桩”,英文应该叫”stub”。现在的rpc实现里,stub这个概念好像都没见到了,应该都是叫”method”。 实现一个rpc服务器很难吗?rpc服务器也就是在tcp服务器的基础上加上自定义的rpc协议而已。一个rpc协议里,主要有个3个非常重要的信息。 调用的远程method名字,一般就是一个函数名 call参数,也就是发送给服务器的数据 客户端生成的调用请求seq 除了最后一点,其他两点显然就是组成一个普通的函数调用而已,这也就是远程过程调用了。最后一点的s...阅读全文

博文 01 September 2013 skoo

使用go reflect实现一套简易的rpc框架

go jsonrpc 在实际项目中,我们经常会碰到服务之间交互的情况,如何方便的与远端服务进行交互,就是一个需要我们考虑的问题。 通常,我们可以采用restful的编程方式,各个服务提供相应的web接口,相互之间通过http方式进行调用。或者采用rpc方式,约定json格式进行数据交互。 在我们的项目中,服务端对用户客户端提供的是restful的接口方式,而在服务器内部,我们则采用rpc方式进行服务之间的交互。 go语言本来就提供了jsonrpc的支持,所以自然开始我们就直接使用jsonrpc。jsonrpc的使用非常简单,对于调用端来说,就如同一个函数调用,如下: args := &Args{7, 8} reply := new(Reply) err := client.Call("Ari...阅读全文

博文 2014-02-21 09:45 siddontang

【滴滴出行】邀请Go大牛加入

滴滴出行诚邀有技术、有热血的golang大牛加入~ 坐标西二旗 有意者请将简历发送至 wangweiyu@didichuxing.com 职位要求 1. 熟练掌握C、C++、java、python等语言,熟悉golang将是很大的加分项,我们未来的开发将以golang为主; 2. 有丰富的工作经验,能够独立主导要求对自己做的项目有自己深入的理解,并能持续的关注和优化自己做的项目,研究过优秀开源软件的源码并有心得者优先; 3. 精通 MySQL 应用开发,熟悉数据库原理和常用性能优化技术,以及 NoSQL原理、使用场景以及限制; 4. 熟悉常用的互联网技术,包括但不限于RPC、MQ、缓存技术、调用策略等; 5. 参与过大型复杂分布式互联网系统的设计、架构者优先...阅读全文

Golang 1.4 net/rpc server源码解析

上一篇文章我们讲了net/rpc中client部分的实现,我本机源码安装路径在/usr/local/go,这net/rpc(golang 1.4版本)涉及到的相关代码主要有: server.go 方法注册: 因为从client我们知道是复用的socket来实现并发调用rpc方法,我们先从方法注册来看源码部分: // Server对象大都是保存方法存根,保证对象互斥的 type Server struct { mu sync.RWMutex // protects the serviceMap serviceMap map[string]*service reqLock sync.Mutex // protects freeReq freeReq *Request respLock sync....阅读全文

博文 2015年3月23日 毛, 剑

golang grpc thrift with aerospike

面对着数百G的数据,数万的TPS,一直在找合适的数据库及RPC框架。最近对aerospike和google grpc、apache thrift进行了简单的测试。 测试的内容比较简单,就是客户端根据KEY到服务端进行查找,返回value。为了测试简单,数据库中只有一对key_value。数据库用的aerospike,RPC框架分别用grpc\thrift,客户端、服务端都用GO语言开发。 grpc定义如下: syntax = "proto3"; package inf; message AuthRq { string clientId = 1; string token = 2; } message AuthRp { string token = 1; } message DataTypeR...阅读全文

博文 2015-06-06 18:16 dazheng

一个golang推送服务器集群:gopush-cluster

Terry-Mao/gopush-cluster 是一个支持集群的comet服务(支持websocket,和tcp协议)。 特性 轻量级高性能纯Golang实现支持消息过期支持离线消息存储支持单个以及多个私信推送支持单个Key多个订阅者(可限制订阅者最大人数)心跳支持(应用心跳和tcp keepalive)支持安全验证(未授权用户不能订阅)多协议支持(websocket,tcp)详细的统计信息可拓扑的架构(支持增加和删除comet节点,web节点,message节点)利用Zookeeper支持故障转移 安装(版本1.0.5) 一、安装依赖 ? 1 2 $ yum -y install java-1.7.0-openjdk $ yum -y install gcc-c++ 二、搭建zookee...阅读全文

博文 2015-02-07 22:41 orangesdk

奇虎360 和 go

This guest blog post was written by Yang Zhou, Software Engineer at Qihoo 360. Qihoo 360 is a major provider of Internet and mobile security products and services in China, and operates a major Android-based mobile distribution platform. At the end of June 2014, Qihoo had about 500 million monthly active PC Internet users and over 640 million mobil...阅读全文

博文 2015-07-09 15:00:01 尹绵绵, 肖邦也没谱, zypy333

gopush-cluster 架构

前言 gopush-cluster是一套golang开发的实时消息推送集群,主要分享一下开发这套系统的想法和思路。 架构 主要分为三个模块来开发,comet/web/message。 comet 主要负责消息排队、消息推送以及和客户端的连接维护;整套系统依据是消息ID顺序原则获取消息(客户端本地获取最大的消息是1,那么之后获取的消息就是大于1的,获取离线消息的时候也要从上次最大消息ID来获取),因此消息推送以后需要在comet中排队然后发起RPC给message实现存储。 message 主要负责消息的存储和读写;接受来自comet模块的消息进行持久化,或者接受web模块的读取消息请求获取离线消息。message是可以部署多个节点来负载来自大量comet的推送压力,比如不同的comet使用不...阅读全文

博文 2014-03-06 21:48 bhtfg538

Qihoo 360 and Go

自:http://blog.golang.org/qihoo Qihoo 360 and Go This guest blog post was written by Yang Zhou, Software Engineer at Qihoo 360. Qihoo 360 is a major provider of Internet and mobile security products and services in China, and operates a major Android-based mobile distribution platform. At the end of June 2014, Qihoo had about 500 million monthly act...阅读全文

博文 2015-07-07 17:47 leonzhouwei

GO 编写的进程管理工具 Gosuv

Gosuv是一个进程管理工具,使用Go语言编写。受python-supervisor启发,学习了很多其中的功能和用法。 至于为什么要写一个go的进程管理工具,主要还是因为感觉python-supervisor不是很好用(毕竟我也用了这玩意好几年了,又爱又恨)。因此gosuv对其不易用的部分重点加强了下。 Web控制台部分做了重点加强,因为使用频率太高了。在网页上也可以直接添加先的应用,网页查看日志的部分也做了优化,查看起来没有这么费劲了。使用了websocket连接后端,状态一有变化,前台就能立刻看到变化。 命令行做了部分修改,通常来说reload是热加载的命令,可是python-supervisor的reload命令是重启后台主进程,用起来显然很不习惯,顺手改掉。 配置文件也被我全...阅读全文

Go语言的RPC介绍(含Protobuf-RPC)

本文在 Golang中国博客 的地址: http://blog.go-china.org/09-protorpc 标准库的RPC RPC是远程调用的简称, 简单的说就是要像调用本地函数一样调用服务器的函数. Go语言的标准库已经提供了RPC框架和不同的RPC实现. 下面是一个服务器的例子: type Echo int func (t *Echo) Hi(args string, reply *string) error { *reply = "echo:" + args return nil } func main() { rpc.Register(new(Echo)) rpc.HandleHTTP() l, e := net.Listen("tcp", ":1234") if e != n...阅读全文

博文 2014-01-08 22:14 chai2010

如何实现支持数亿用户的长连消息系统 | Golang高并发案例

此文是根据周洋在【高可用架构群】中的分享内容整理而成,转发请注明出处。周洋,360手机助手技术经理及架构师,负责360长连接消息系统,360手机助手架构的开发与维护。不知道咱们群名什么时候改为“Python高可用架构群”了,所以不得不说,很荣幸能在接下来的一个小时里在Python群里讨论golang....360消息系统介绍360消息系统更确切的说是长连接push系统,目前服务于360内部多个产品,开发平台数千款app,也支持部分聊天业务场景,单通道多app复用,支持上行数据,提供接入方不同粒度的上行数据和用户状态回调服务。目前整个系统按不同业务分成9个功能完整的集群,部署在多个idc上(每个集群覆盖不同的idc),实时在线数亿量级。通常情况下,pc,手机,甚至是智能硬件上的360产品的pu...阅读全文

golang rpc的两种调用方法

golang的rpc有两种方法进行调用,一种是rpc例子中给的:package main import ( "net/rpc" "net/http" "log" "net" "time" ) type Args struct { A, B int } type Arith int func (t *Arith) Multiply(args *Args, reply *([]string)) error { *reply = append(*reply, "test") return nil } func main() { arith := new(Arith) rpc.Register(arith) rpc.HandleHTTP() l, e := net.Listen("tcp", ":1...阅读全文

博文 2013-02-28 17:20 yjf512

为什么 PHPer 应当学习 Golang

熟悉我的朋友应当知道,近些年的大部分时间我的工作都会多少和 PHP 相关。随着 PHP 有着越来越深入的了解,以及遇到越来越多的不同业务时,使用 PHP 总会让我有一种莫名的无力感。当然,并不是我一个人在使用 PHP 的时候遇到了问题。事实上,每个略微有一些经验,接触过一些需求的人都会有同样的困惑。各种配合 LAMP(或者LNMP?)架构的后端技术也因此被发明或被发现,进而整合到 PHP 的开发的技术体系中。从简单的 Memcached作为数据中转,cron 后端定时处理;到 Gearman、RabbitMQ 这些队列神器;最近 Laruence 甚至封装了利用 libcurl 的异步特性实现并发 RPC 调用的 yar 扩展。几乎整个社区都在寻找 PHP 的摩西之路。 好吧,说了一大堆,回...阅读全文

博文 2012/08/23 mikespook

Go语言的RPC介绍(含Protobuf-RPC)

标准库的RPC RPC是远程调用的简称, 简单的说就是要像调用本地函数一样调用服务器的函数. Go语言的标准库已经提供了RPC框架和不同的RPC实现. 下面是一个服务器的例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 type Echo int func (t *Echo) Hi(args string, reply *string) error { *reply = "echo:" + args return nil } func main() { rpc.Register(new(Echo)) rpc.HandleHTTP() l, e := net.Listen("tcp", ":1234") if e != nil { log.Fatal("...阅读全文

博文 2015-08-22 18:53 wkyb608

GoLang之网络

GoLang之网络 Go语言标准库里提供的net包,支持基于IP层、TCP/UDP层及更高层面(如HTTP、FTP、SMTP)的网络操作,其中用于IP层的称为Raw Socket。 net包的Dial()函数用于创建网络连接,函数原型如下: func Dial(net, addr string) (Conn, error) 其中net参数是网络协议的名字,addr参数是IP地址或域名;如果连接成功,返回连接对象,否则返回error。 目前,Dial()函数支持如下几种网络协议:"tcp"、"udp"、"ip"、"ip6"等,例如: conn, err := net.Dial("tcp", "192.168.0.10:2100") // TCP连接 conn, err := net.Dial(...阅读全文

博文 2015-05-15 15:54 chenny7

Go语言的RPC介绍(含Protobuf-RPC)

标准库的RPC RPC是远程调用的简称, 简单的说就是要像调用本地函数一样调用服务器的函数. Go语言的标准库已经提供了RPC框架和不同的RPC实现. 下面是一个服务器的例子: type Echo int func (t *Echo) Hi(args string, reply *string) error { *reply = "echo:" + args return nil } func main() { rpc.Register(new(Echo)) rpc.HandleHTTP() l, e := net.Listen("tcp", ":1234") if e != nil { log.Fatal("listen error:", e) } http.Serve(l, nil) }...阅读全文

博文 2014-01-09 22:54:42 来源网络

golang jsonrpc

package main import ( "github.com/streadway/amqp" "log" "net" "net/rpc" "net/rpc/jsonrpc" "os" "time" ) type MPMsg struct { } func (mpMsg *MPMsg) Handle(args *map[string]interface{}, reply *map[string]interface{}) error { *reply = map[string]interface{}{} return nil } func main() { lf, _ := os.OpenFile("/var/log/"+time.Now().Format("2006-01-02T15:0...阅读全文

博文 2015-11-19 20:03 nowboy11427

golang rpc

rpc server端(golang版本): package main import ( "errors" "fmt" "net" "net/rpc" "net/rpc/jsonrpc" ) const ( URL = "127.0.0.1:5001" ) type Args struct { A, B int } type Arith int func (t *Arith) Add(args []Args, reply *int) error { for i := 0; i < len(args); i++ { *reply += args[i].A *reply += args[i].B } return nil } func main() { arith := new(Arith) r...阅读全文

博文 2015-10-26 17:53 webyh