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

模拟浏览器登录操作

近来想用Go做一点事,以减轻工作上的负担。 我的工作中有几项工作是每日重复的,大致内容: 1、将数据收集到Excel中。 2、收集齐后,将Excel中的部分数据提交到办公系统中(网页上操作)。 3、再将提交过后的审批号码提取出来,存入Excel中。 我现在有两个问题: 1、现在,上面的第一步Excel操作,Go中不知有何现成的库,若没有,我有个效率不高的办法。这个问题倒还不算急。 2、第二个问题比较着急。向办公系统提交数据,得先登录。我的操作步骤如下: 2.1、先访问办公系统首页,获取Session的Cookie。 2.2、进行登录数据提交,将刚才获取的这个Session的Cookie一并提交上去。 2.3、进行业务数据提交。 我现在的...阅读全文

Golang 逐行读取文件

golang的错误处理有点奇怪. 插入代码时候, 使用插入代码(推荐) 出现错误: 无法解析服务器的 DNS 地址。 使用插入代码, 直接是文本插入, 连着色都没有. 插入图片要地址, 不能上传. 下载客户端, 转到微软的网站时已经是: We can’t find that page. 写个博客都这么难比较失望. package jutil import ( "bufio" "io" "os" "strings" ) func ReadLine(fileName string, handler func(string)) error { f, err := os.Open(fileName) if err != nil { return err } buf := bufio.NewReade...阅读全文

博文 2015-02-23 11:51 zoltun

goproxy和msocks简介

goproxy是我个人写的,和shadowsocks同类的软件。当然,在设计之初我完全不知道shadowsocks的存在,goproxy的最初目标也不是成为shadowsocks的同类。只是我一直无法实现一个可靠的,能够达成目标的系统。最后想,那这样吧,我找一个跳一跳能够够到的苹果。大幅简化的结果就是goproxy——后来我才知道shadowsocks。 shadowsocks的基本原理 shadowsocks的基本概念,就是利用某种不同于SSL的协议,将本地的socks数据流转发到远程。这个协议,在默认版本中是一个凯撒变换,后来有了aes等加密算法。goproxy也采用了类似的做法,同样支持aes等加密算法。在每次连接时,客户端先用加密通道连接服务器端,然后完成整个连接通路。这样的设计鲁棒...阅读全文

使用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...阅读全文

Go 的快速 HTTP 包fasthttp

fasthttp 是 Go 的快速 HTTP 实现,当前在 1M 并发的生产环境使用非常成功,可以从单个服务器进行 100K qps 的持续连接。 HTTP 服务器性能与 net/http 比较 总而言之,fasthttp 比 net/http 快 10 倍 GOMAXPROCS=1 net/http: $ GOMAXPROCS=1 go test -bench=NetHTTPServerGet -benchmem PASS BenchmarkNetHTTPServerGet1ReqPerConn 100000 21211 ns/op 2407 B/op 30 allocs/op BenchmarkNe...阅读全文

GO同包内不同文件方法引用问题

问题:GO语言同包内不同文件方法引用在本地LiteIDE中可运行,但在linux环境下报错: 在main.go中引用c2c_admin_base_info.go中GetcsChatCntTrend方法: 本地运行正常,但部署至linux服务器时,报错: 解决方案:将c2c_admin_base_info.go放到包data下 main.go c2c_admin_base_info.go 层级关系: 注:包和package有关系:main包和main函数比较特殊,是程序的入口,其他的包就要和文件夹名字一样(感谢扫盲的GO大牛...阅读全文

GoAgent使用教程:翻墙并没有那么难

最近不知道什么原因,浏览外网被“墙”得特别厉害。昨晚小编潜心的研究了一下GoAgent的相关文章,发现其实整个设置过程也很简单,只是一些网站没有表达清楚而已。为了畅通地看墙外风景,大家还是跟小编来弄一个自己专属的GoAgent吧。 工具/原料 google chrome webfreer浏览器 goagent 方法/步骤 图文教程 一、申请 Google App Engine 并创建 appid 下载webfreer浏览器安装后操作下面步骤,Web Freer 1.1下载 申请注册一个 Google App Engine 账号。没有 Gmail 账号先注册一个, 用你的 Gmail 账号登录。 登录之后,自动转向 Application 注册页面,如下图: 接下来的页面,输入你的手机号码,需...阅读全文

博文 2015-04-18 17:53 小_菜

服务发现:Zookeeper vs etcd vs Consul

【编者的话】本文对比了Zookeeper、etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考。 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口。管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多。因此我们应该部署无需指定端口的服务,并且让Docker为我们分配一个随机的端口。唯一的问题是我们需要发现端口号,并且让别人知道。 当我们开始在一个分布式系统上部署服务到其中一台服务器上时,事情会变得更加复杂,我们可以选择预先定义哪台服务器运行哪个服务的方式,但这会导致很多问题。我们应该尽我们所能尽量利用服务器资源,但是如果预先定义每个服务的部署位置,那么...阅读全文

博文 2015-09-13 国会山上的猫TuxHu

go post json 遇到的问题

想用go写一个客户端,发一个JSON数据到JAVA的服务端接口, 结果,JAVA接收的BODY一直是空,但是PYTHON写的服务端是OK的 网上查了方法 其中:一些方法 也试过了, type RequestBody struct { Status string `json:"status"` Region []string `json:"region"` Percent string `json:"percent"` Task_id string `json:"task_id"` } b, err := json.Marshal(rbody) body := bytes.NewBuffer([]byte(b)) (1) resp, err := http.Post(url, "applica...阅读全文

博文 2015-09-18 13:09 vance928

[golang]GO语言编写的基于UDP协议的简易聊天软件

初学GO不到两周,本着熟悉语言的目标写了这个小程序,漏洞很多,实现上写的也有些渣渣,欢迎大家阅读指点。 下载地址:https://github.com/yinxin630/gochat 简单思路描述: 0、服务端监听客户端请求,完成会话转发的任务 1、服务端采用心跳包维护用户在线状态 2、客户端通知服务端自己的监听地址,创建服务端-客户端信息通道 服务端: package main import ( "fmt" "net" "os" "strconv" "time" ) //用户信息 type User struct { userName string userAddr *net.UDPAddr userListenConn *net.UDPConn chatToConn *net.UDPC...阅读全文

博文 2014-04-04 17:33 u011229962

golang微信支付服务端

一般来说,使用golang主要还是写服务端。所以本文主要讲golang在处理微信移动支付的服务端时的统一下单接口和支付回调接口,以及查询接口。 微信支付流程 下图是微信官网的支付流程描述: 图中红色部分就是微信支付中,我们的系统包括app,后台需要参与的流程。 其中需要后台也就是Server需要参与的流程有三个: 1. 统一下单并返回客户端 2. 异步通知结果回调处理 3. 调用微信支付查询接口 微信所有的接口都是以http RESTFul的API来提供,所以对于server而言其实就是call这些接口并处理返回值。 golang的服务端实现 1,调用统一下单接口 首先需要呼叫:https://api.mch.weixin.qq.com/pay/unifiedorder 这是微信的api,呼...阅读全文

博文 2015-12-23 13:14 xyzhaopeng

GO语言HTTP代理服务器

package main import ( "fmt" "io" "log" "net/http" "net/http/httputil" "net/url" ) func httpUserInfo(w http.ResponseWriter, r *http.Request) { ret := "your addr is:" + r.RemoteAddr + "\r\n" ret += "request headers:" + fmt.Sprint(r.Header) io.WriteString(w, ret) } func main() { targetURL, err := url.Parse("http://127.0.0.1:80") log.Println("program s...阅读全文

博文 2014-07-20 21:48 scybs

golang 仿python pack/unpack

写得不完善也不完美 尤其是高低位转换那(go和c 二进制高地位相反 需要转换,还有go int转[]byte长度是4位),希望牛人看后指导一下 项目需要通过socket调取 客户端是go ,服务器端是python,由于需要封包解包,就参照python写的 python 的pack/unpack 参考 Python使用struct处理二进制(pack和unpack用法) package includes import ( "bytes" "encoding/binary" "fmt" _ "os" "strconv" "strings" ) type Protocol struct { Format []string } //封包 func (p *Protocol) Pack(args .....阅读全文

博文 2015-04-07 09:53 wangxusummer

golang 手游框架设计 - 本人浅陋的见解, 求达人指正

如有错误的地方,请同仁指正,非常感谢 第一种方式: 共3个进程 Login: 登陆服(同时用于聊天系统) socket长连接 Game: 游戏服(游戏逻辑处理) http短连接 Mysql: 数据库回写 socket 客户端socket连接login,保持长连接,验证成功后,向game服以http方式请求数据 game服向login服http方式验证该客户端是否已经正常登陆, 1: 没有登录则,game返回数据给客户,没有登录状态. 2: 已经登陆,则game返回所需数据给客户端. game将修改后的数据以sql语句形式发送给mysql服,同时记录当前sql到文件中用于备查. 使用单独login服的好处在于 客户端可以一直保持连接,并且login服逻辑处理少. 服务器压力小.同时在game服...阅读全文

博文 2014-08-20 20:16 984195889

geohash算法以及求最邻近区域的点-golang

geohash算法以及求最邻近区域的点, 对这两个算法封装成了golang package, 写LBS服务程序的时候有用。https://github.com/gansidui/geohashhttps://github.com/gansidui/nearest package main import ( "fmt" "github.com/gansidui/geohash" ) func main() { latitude := 39.92324 longitude := 116.3906 precision := 5 hash, box := geohash.Encode(latitude, longitude, precision) fmt.Println(hash) fmt.Prin...阅读全文

博文 2014-12-30 12:56 bluezwt

Go 语言使用 TCP keepalive

自:http://studygolang.com/articles/951 Go 语言使用 TCP keepalive 如果你写过某些 TCP socket 代码,你可能会疑问:如果网线被拨掉或者远程主机崩溃了我的TCP连接会怎样? 简短的答案是:一点影响都没有。这种情况下连接的结束远程主机是不会发送FIN数据包的,并且本地系统不能检测连接是否已中断。所以需要作为程序员的你来解决这种情况。 --zxp 翻译于 1 个月 前 0人顶 顶 翻译的不错哦! GO语言为你提供了解决这个问题的几种方法。首选的方法可能是 net.Conn 接口中的SetReadDeadline方法。假设你的连接在以一种特定的间隔来接收数据,你可以简单地把读取超时当作一个io.EOF错误并Close这个连接。很多现有的T...阅读全文

博文 2014-12-26 13:31 leonzhouwei

代理服务扩展

之前自己实现了一个代理服务,当时考虑的是只要支持SOCKS5就好了,因为我经常用CHROME,配合着SwitchySharp,体验还是很棒的。但是我现在有点讨厌CHROME,它现在太庞大了,占用资源太多了。而且我有锁定网页的习惯,一打开CHROME,就十几个甚至二十几个进程起来,让我很不爽。但是不得不说CHROME的安全设计还是非常棒的。然后我就试了下FireFox,额,我觉着它和IE差不多.然后就放弃了,然后看看了手头上的IE已经到11了,平时用起来感觉还是很不错的,所以我想支持IE的代理。 IE的代理机制比较囧,比如说它只支持SOCKS4,不支持SOCKS5,然后又分为HTTP代理,HTTPS代理,还有FTP代理。也没有像CHROME提供强大的代理插件机制。虽然IE提供了PAC机制,但是...阅读全文

博文 2014-10-05 13:35 concurrency

服务监控系统 Prometheus

Prometheus 是一个开源的服务监控系统和时间序列数据库。 ![image](http://static.oschina.net/uploads/space/2015/0205/082749_47Dp_5189.png) 特性: * 高维度数据模型 * 自定义查询语言 * 可视化数据展示 * 高效的存储策略 * 易于运维 * 提供各种客户端开发库 * 警告和报警 * 数据导...阅读全文

不用go-(xxoo)agent的也有可能是程序员

记得是去年某个时候,在一个群里问大家是怎么翻(什么)墙的,发现很多人是用go-(xxoo)agent的,而我当时完全没听说过go-agent,因为我已经N多年不翻(什么)墙了,于是,有人就说:“连go-(xxoo)agent都没用过你还是程序员吗?”说实话,我也不希望我是程序员啊!可我真的没用过go-(xxoo)agent啊! 想起我一位前同事,工作很多年了,却从来没用过linux!(也不知道他说的是真的还是假的,至于你信不信,反正我是信了。)他说这是他第一次用linux!(也难怪啊,他在原来的公司干里好多年,公司是用.net的。自然没必要用linux。)但我不能说他不是程序员,事实上,他工作完成得很出色。i第一次接触linux,很快就熟悉了。 不用linux还可以用windows,不用go...阅读全文

HTTP Payload

今天用go重写了一个用Ruby实现的http请求功能。但是在请求参数相同的情况下go的请求一直被服务器返回参数错误。 既然参数相同,那就应该是Header里面有问题喽? 我把Ruby代码生成的请求弄出来看了下 POST参数是包在payload里面的。哦! 等等!payload是什么鬼啊!! 我在go的http package里面没看到这玩意儿。 所以还是要知道payload是干嘛的。 根据wiki的解释:payload是跟在请求header后面的数据,是一次请求的主要数据或者说主要目的。 SO上有一个直观的解释:Request Payload 就是POST、PUT等http请求所发送的数据。它是header之后的部分。 一个Content-Type是application/json的请求,具...阅读全文

goalng 如何利用mux写一个文件服务器

我用net/http写了一个文件服务器,代码很简单,可以运行,代码如下: package main import "net/http" func main(){ http.Handle("/", http.FileServer(http.Dir("../template"))) http.ListenAndServe(":8888", nil) } 然后在template目录下的任何文件和目录在ie中都可以访问 然后我用net/http+github.com/gorilla/mux改写了上述代码,如下: package main import "net/http" import "github.com/go...阅读全文

go代理服务器代码

go代理服务器代码 最近用废弃的小笔记本搭了个centos服务器挂着,搭了ssh,tomcat,go环境,想搭个代理服务器访问路由,不想安装,想自己写一个,顺便复习一下go语言知识。 一开始,我网上搜了一下go语言写代理服务器的代理,搜索到一个: 来自:http://symphony.b3log.org/article/1357452978419 (原文地址:http://kejibo.com/golang-http-proxy-server 已失效) package main import ( "http" "log" "os" "io/ioutil" ) func handler(w http.ResponseWriter, r *http.Request) { resp, err :=...阅读全文

博文 2015-07-23 00:33 u010499721

c语言客户端与golang服务端通信(网络字节序)

网络二进制数据转换: 总所周知,数据在tcp网络传输协议中传输的字节序是大端模式的,换句话说如果你要传输一个int32型的整数,那么假设其二进制小端模式表示为11111111111111110000000000000000那么其大端模式表示为00000000000000001111111111111111,利用c语言的htonl函数会将数据字节序转换成大端模式,在网络上面传输,接收端想解出原始数据只需要认为发送来的数据是大端模式,按照大端模式表示的数据解析便可 举个例子: 在C语言端发送一个int32_t数据过程如下: 发送端(c语言) char buf[100]; int32_t x = 100; ((int*)buf)[0] = htonl(x); send(clientfd, buf,...阅读全文

博文 2016-02-25 17:18 candycloud

Go 语言使用 TCP keepalive

如果你写过某些 TCP socket 代码,你可能会疑问:如果网线被拨掉或者远程主机崩溃了我的TCP连接会怎样? 简短的答案是:一点影响都没有。这种情况下连接的结束远程主机是不会发送FIN数据包的,并且本地系统不能检测连接是否已中断。所以需要作为程序员的你来解决这种情况。 --zxp翻译于 1 个月 前 0人顶 顶 翻译的不错哦! GO语言为你提供了解决这个问题的几种方法。首选的方法可能是 net.Conn 接口中的SetReadDeadline方法。假设你的连接在以一种特定的间隔来接收数据,你可以简单地把读取超时当作一个io.EOF错误并Close这个连接。很多现有的TCP协议都支持处理错误的这种方法,它们通过定义某种心跳机制或 service health 1,在端点间以特定间隔发送PI...阅读全文

博文 2014-10-09 16:00:00 --zxp, 0x0bject

Go后端+iOS端+Android端的AES256加密方案(Android端)

移动端与服务端通讯需要采用AES 256加密。 Androd客户端的实现代码为: import android.util.Base64; import java.io.UnsupportedEncodingException; import java.security.Key; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AESEncrypt { private static final String KEY_A...阅读全文

博文 2015-07-06 17:32 陈小锅

Elasticsearch的Go语言客户端开发包 Elastic-Go

Elastic是 [Elasticsearch](http://www.oschina.net/p/elasticsearch) 的 [Go](http://www.oschina.net/p/go) 语言客户端开发包。 快速入门:

// Create a client
client, err := elastic.NewClient()
if err != nil {
    // Handle error
}

// Create an index
_, err = client.CreateIndex("twitter").Do()
if err...阅读全文

IE 11下载文件中文乱码解决(go/php)

IE 11下载文件的时候发现乱码. 网上查了下资料,了解了一下,主要是user-agent变了,不再是MSIE,面是rv:11.0这样,所以只要服务端判断出是IE 11,处理跟MSIE一样。 GO: func setDownloadFileName(w http.ResponseWriter, fileName, agent string) { if strings.Contains(agent, "MSIE") { fileName = url.QueryEscape(fileName) fileName = strings.Replace(fileName, "+", "%20", -1) } if strings.Contains(agent, "rv:") && strings.Co...阅读全文

博文 2015-06-16 09:50 rariki

golang http服务器跨域问题解决

func main() { openHttpListen() } func openHttpListen() { http.HandleFunc("/", receiveClientRequest) fmt.Println("go server start running...") err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } } func receiveClientRequest(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin"...阅读全文

golang实现的反向代理

翻阅golang包手册的时候看到net/http/httputil有一个type ReverseProxy,这个不是反向代理吗!golang自带反向代理功能?好奇就试了一下,确实非常简单,没有几行代码就实现了一个简易的反向代理服务。 关于反向代理百度百科上说的非常详细了,这里摘录一下定义: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 golang实现代码 package main import ( "log" "net/http" "net/http/httputil" "net/url" ) ...阅读全文

MQTT 代理 SurgeMQ

SurgeMQ 旨在提供 MQTT 代理和客户端开发包,完全兼容 MQTT sepc 3.1.1,此外尝试兼容 3.1。SurgeMQ 目前开发活跃,在一台 4 核 2.8G i7 处理器的 MBP 上性能可达: * **over 400,000** MPS in a 1:1 单发布者和生产者配置 * **over 450,000** MPS in a 20:1 fan-in configuration * **over 750,000** MPS in a 1:20 fan-out configuration * **over 700,000** MPS in a full mesh configuration with 20 clients ![image](http://st...阅读全文

go简易udp客户端和服务器

go简易udp socket客户端和服务器 1.Socket编程 以前使用Socket编程时,一般是如下步骤 建立socket,socket 绑定socket,bind 监听,listen 接受连接,accept 接受/发送,recv/send Go语言对其进行了抽象和封装,刚开始接触有可能不太适应(譬如我第一天用的时候觉得API好难找……建议参考文档),后来发现用起来很爽 简单来说,客户端省去了很多!客户端只需要调用net.Dial()即可,服务器我这里还需要摸索一下,但是也是很简单了,不过流程感觉没简化- - 废话不多说,直接上代码 2.Server端 import ( "os" "fmt" "net" ) func checkError(err error){ if err != ni...阅读全文

博文 2016-04-01 00:48 qq_15437667

Golang实现简单tcp服务器03 -- 文本广播式聊天服务器/客户端

用Golang实现 文本广播式聊天服务器/客户端 本节, 我们将一步一步的把上一节完成的echo服务器/客户端改造成一个文本信息的聊天室 服务端的改动 服务器为了实现聊天信息的群体广播, 需要记录所有连接到服务器的客户端信息, 所以, 我们需要添加一个集合来保存所有客户端的连接: var ConnMap map[string]*net.TCPConn 接着, 每次当有新的客户端连接到服务器时, 需要把这个客户端连接行信息加入集合: ConnMap[tcpConn.RemoteAddr().String()] = tcpConn 当服务器收到客户端的聊天信息时, 需要广播到所有客户端, 所以我们需要利用上面保存TCPConn的map来遍历所有TCPConn进行广播, 用以下方法实现: func...阅读全文

博文 2015-06-02 22:36 victoriest

go实现的简易TCP的客户端和服务器

今天介绍golang版本的通信基础:基于TCP的客户端和服务器实现,参考书籍:The Way To Go 那时学习java的时候也是做过通信的,当时是socket编程,服务器监听某一个端口,然后客户机去连接,简单的聊天室就实现了。后来有变成多线程的聊天室,可以进行群聊什么的了,后期可以传图片传音乐,加上UI那一块儿,山寨QQ就OK了。现在我来用golang实现一下简易的聊天室,实现了客户机连接服务器,给服务器发消息,服务器接受消息,客户机退出,服务器可以收到退出信息,以及多个客户机同时连入一个服务器。主要的思路和java一样的,服务器监听某一个端口,客户机去连接,然后发送消息就OK了。上代码了。package main //服务器端import ( "fmt" "log" "net" //支...阅读全文

博文 2015-08-28 10:57 徐学良

比较Erlang和Golang

雨天的周末,适合码字的时节。。。 一年前我开始学习go语言的时候,如获至宝,既有python的编码效率,又带来性能的15倍提升。尤其是在异步编程方面,可以使用channel同步线程,不必加锁可以充分利用cpu多核计算,真是没有弱点。 后来慢慢了解到,这种无锁异步编程的思想,源自一门叫做erlang的语言,Erlang更加了不起。除了异步编程之外,这门语言天生支持分布式,单机上开发的软件,可以不加修改地运行在集群上,另外还支持软件版本的热升级,自带的OTP框架支持进程间的监督和重启,提供了坚如磐石的运行环境。Erlang是如此完美,我认为是最适合开发互联网应用的语言,一时间有种“终于找到真理”的喜悦。 不过那个时候,心里总觉得有什么地方不对,那就是,七牛CEO许式伟本身是Erlang高手,他却...阅读全文

博文 2015-01-27 10:03 天下杰论

在生成环境中使用 Go 语言两年的总结

在iron.io的生产环境使用Go语言两年后,我想分享我们的经验和感受。我们是第一批在生产环境中使用Go(Go语言)的公司之一,长久以来我们不知道该有怎样的预期,但到目前为止,很棒。 在之前发表的一篇文章从Ruby切换到Go中我谈了一些,但这次将更具细节一些,我们喜欢这门语言以及一路上我们学到的东西。介绍没有特定顺序,按下面这样: 性能表现(Performance)内存占用(Memory)并发性(Concurrency)可靠性(Reliability)部署(Deployment)天赋(Talent) 性能表现 当我们第一次决定要使用什么语言时我们做了一些调研,为我们的应用环境、消息队列创建了一些模拟。我用Go写了我偏爱的beanstalkd的一个副本实现,使用beanstalkd协议,这样我...阅读全文

golang ftp客户端示例 支持断点续传

package main import ( ftp4go "github.com/shenshouer/ftp4go" "fmt" "os" ) var( downloadFileName = "DockerToolbox-1.8.2a.pkg" BASE_FTP_PATH = "/home/bob/" // base data path in ftp server ) func main() { ftpClient := ftp4go.NewFTP(0) // 1 for debugging //connect _, err := ftpClient.Connect("172.8.4.101", ftp4go.DefaultFtpPort, "") if err != nil { fmt....阅读全文

博文 2015-10-29 18:00 shenshouer

请教一个golang如何通过代理服务器验证问题

最近在做一个简单测试,在公司内网实现抓取外网一个网页,但是因为公司是通一个代理服务器出去的,所以需要先通过代理服务器验证。找了好久的资料实在没找到,我用c#可以实现。主要是不知道golang下面怎么实现代理服务器的验证,代码是在网上一个关键代码如下: func fetch(url, proxy_addr *string) (html string) { transport := getTransportFieldURL(proxy_addr) client := &http.Client{Transport: transport} req, err := http.NewRequest("GET", *url, nil) ****req.SetBasicAut...阅读全文

golang服务端, 游戏公测时遇到的socket写超时的问题, 也是游戏框架的设计问题

问题描述: 游戏公测,玩家大概有几百个.运行一小段时间,大概是20分钟左右或最多半个小时,服务端就卡住了. 卡住较长时间,之后又会变正常一小会儿 查问题过程: 经过对运行日志的分析,程序执行到给客户端socket写数据的时候会一直卡住,然后报错,具体错误已忘记, 大概是写超时之类的. 百度查询,认为是, 服务端在给一个已经关闭的socket写数据才导致的错误, 而这个"关闭"在服务端其实认为没有关闭的. 是客户端主动发起了close的请求, 但是服务端没有正确处理该请求, 导致服务端一直认为该socket是正常,直到超时. 那么框架设计是这样的: 一个玩家的操作会同步给其它玩家,这时是直接给其它玩家的socket发送数据, 此时如果有一个玩家客户端写超时了, 那么其后所有的玩家都会在等待该异...阅读全文

博文 2014-06-17 10:17 984195889

给自己一条退路,再次比较Erlang和Golang

给自己一条退路,再次比较Erlang和Golang_陈叶皓_新浪博客 雨天的周末,适合码字的时节。。。 一年前我开始学习go语言的时候,如获至宝,既有python的编码效率,又带来性能的15倍提升。尤其是在异步编程方面,可以使用channel同步线程,不必加锁可以充分利用cpu多核计算,真是没有弱点。 后来慢慢了解到,这种无锁异步编程的思想,源自一门叫做erlang的语言,Erlang更加了不起。除了异步编程之外,这门语言天生支持分布式,单机上开发的软件,可以不加修改地运行在集群上,另外还支持软件版本的热升级,自带的OTP框架支持进程间的监督和重启,提供了坚如磐石的运行环境。Erlang是如此完美,我认为是最适合开发互联网应用的语言,一时间有种“终于找到真理”的喜悦。 不过那个时候,心里总觉...阅读全文

博文 2015-01-20 13:54 seven1979

分布式聊天服务器 Tim

Tim是一个分布式聊天服务器,采用go语言开发,有很好的并发支持与良好的性能。 1.支持im的基本功能。 2.支持群聊。 3.支持用户状态信息推送,"在线","离开"等。 4.支持消息回执.消息不丢失。 5.支持离线信息,聊天信息等存储与拉取。 6.通过协议拓展,可以支持视频,音频等通讯。 7.支持心跳检测异常断开的客户端,检测客户端验证超时等。 8.支持可配置的同一账号多客户端同时登陆。 9.可以配置关联其他数据库用户系统,tim可以独立于业务之外。 10.支持无数据库模式,此模式无法保存数据。 11.支持自定义消息类型,如发送位置,分享购物信息等。 12.支持分布式部署,服务器横向拓展。 目前实现的...阅读全文

Go 语言 SMTP指令发邮件(实例)

简单邮件传输协议(SMTP)是一种基于文本的电子邮件传输协议,是在因特网中用于在邮件服务器之间交换邮件的协议。SMTP是应用层的服务,可以适应于各种网络系统。SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF(\r\n)。响应信息一般只有一行,由一个3位数的代码开始,后面可附上很简短的文字说明。 SMTP要经过建立连接、传送邮件和释放连接3个阶段。具体为: (1)建立TCP连接。 (2)客户端向服务器发送HELLO命令以标识发件人自己的身份,然后客户端发送MAIL命令。(EHLO 是扩展指令,不同服务器有不同指令) (3)服务器端以OK作为响应,表示准备接收。 (4)客户端发送RCPT命令。 (5)服务器端表示是否愿意为收件人接收邮件。 (6)协商结束,发送邮件,用命令DA...阅读全文

Microservice架构模式简介

在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书《Building Microservices》。该书描述了如何按照Microservice架构模式设计及搭建一个具有良好扩展性并可持续开发的系统。除此之外,该书还将基于该模式的系统演化流程与Continuous Delivery等当前甚为流行的开发流程结合在了一起,使得Microservice架构模式看起来非常具有吸引力。基于这些原因,该架构模式迅速被业界所熟知,并在多个产品中被尝试着使用。这其中就包含了我们公司的产品vRA。 在这一年多的时间里,我们不但真正地体会到了Microservice所具有的一系列优点,也犯过一系列错误。因此在这篇文章里,我会对Microservice...阅读全文

博文 2015-07-13 23:46 loveis715

golang revel下免声明对象动态接收json post 数据

写惯了node服务端API,换到静态类型语言很不爽,规则一大堆~ 要动态必需的!必须的!的! 这里注意几个包 json转换和解析用 github.com/bitly/go-simplejson go get github.com/bitly/go-simplejson body转换解析用 直接导入 strings io/ioutil POSTMAN提交数据 {"data":"yes","hotel":["caonima","gelebi"],"HP":10000000} 控制器action 数据POST接收 package controllers import ( "github.com/revel/revel" "io/ioutil" "strings" console "fmt" sim...阅读全文

博文 2014-12-17 23:56 诸葛囧明

Go项目(一)、服务器数据拉取和Material Design风格

零、Go项目的github地址:https://github.com/fantianwen/Go 一、前言:因为希望能能够整合现在安卓的围棋app中较好的东西和当下较为流行的App中常见的功能,于是,打算开始这个叫Go的项目。 初步希望实现的功能: 1、使用Material Design风格进行app界面的搭建; 2、具体实现模块: 1>用户中心; 2>新闻中心; 二、新闻中心的实现: 2.1、使用技术:Jsoup,tcpdump,wireshark,本来打算使用tcpdump和wireshark来进行sina体育客户端的数据包的抓取,然后分析出sina体育客户端和服务器端的交互接口。希望有时间能够学习下lunix下的抓包工具tcpdump命令。使用tcpdump分析数据接口失败之后,就使用...阅读全文