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

RocketMQ主从如何同步消息消费进度?

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 前面我也跟大家讲述了 RocketMQ 读写分离的规则,但是你可能会问,主从服务器之间的消费进度是如何保持同步的?下面我来给大家解答一下。 如果消费者消费模式不同,也会有不同的保存方式,消费者端的消息消费进度保存到 OffsetStore 中,他有两个实现类: org.apache.rocketmq.client.consumer.store.LocalFileOffsetStore // 本地消费进度保存实现 org.apache.rocketmq.client.consumer.store.RemoteBrokerOffsetStore // 远程消费进度保存实现 其中,如果是广播...阅读全文

博文 2019-10-25 20:32:49 aside section._1OhGeD

golang调用原生epoll引起event loop阻塞问题

前言: golang标准库net很优秀,可以让开发者轻易构建非阻塞网络服务,但开发爽快带来的问题协程数加大,比如在net/http里一个连接两个协程,grpc算是业务和keepalive心跳是四个协程,数据的进出是通过channel传输。 golang netpoll抽象了epoll事件的调用,借助runtime的gopark&goready实现就绪协程的调度,让应用层用同步方法构建io异步的网络应用。 该文章原文地址 http://xiaorui.cc/archives/6758 问题: 那么如何规避netpoll的协程太多的问题? 业界通用的方案是通过原syscall epoll实现网络应用,比如evio、gnet库。我先前使用过evio构建过不少服务,但当你的业务调用含有阻塞逻辑时会使...阅读全文

博文 2020-03-21 21:54:34 rfyiamcool

你应该知道的HTTP基础知识

2017-08-22怪盗kidou腾讯课堂Coding学院点击蓝字,关注我们哦! 作者:怪盗kidou链接:http://www.jianshu.com/p/e544b7a76dac说明:本文内容仅限于本人熟知的内容,HTTP的内容任意一个知识点都可以单独写一篇博客,所以别指望靠一篇博客可以讲清楚,本文的主要作用是为以后的博客作铺垫,所以更详细的HTTP协议内容可参考RFC 2616,本人水平有限,如有不正确的地方欢迎留言指出。1. HTTP请求报文格式HTTP 的请求报文分为三个部分请求行、请求头和请求体,格式如图: HTTP请求报文格式注:部分文章也将HTTP请求报文分为两部分请求头和请求体,请求头的第一行为请求行。1.1 请求行请求行(Request Line)分为三个部分:请求方法、...阅读全文

记一次golang的内存泄露

程序功能 此程序的主要功能是将文件中数据导入到clickhouse数据库中。 【问题描述】 服务器内存每隔一段时间会耗尽 【问题分析】 由于使用的是go语言开发的,所以采用了业界流行的工具pprof。 参考URL:https://cizixs.com/2017/09/11/profiling-golang-program/ 工具的使用与思路: 1)先修改源代码 2)安装工具观察 3)根据工具抓取的现象进行分析 4)修复内存缺陷代码, 再根据分析结果修复内存泄漏的地方 5)发布代码进行再跟踪分析 ================================================== 1)修改代码: 使用这个工具前需要在代码中写几行代码,以便能使用这个工具的来收集数据。 1 //引...阅读全文

博文 2020-02-16 09:30:45 CtripDBA

golang服务端初始化过程

golang 服务端程序初始化流程: golang程序中只能有一个main函数,用来进行全局初始化。各个package中还会有对应模块的init函数。 初始化时,首先会默认调用main所在的package,然后加载import的package,并初始化引入的package对应的init函数,直至所有的package都加载完成,执行main包中的mian函数进行函数初始化,并执行对应方法...阅读全文

博文 2018-11-27 01:34:41 江北晓白

Go36-47-基于HTTP协议的网络服务(net/http)

基于HTTP协议的网络服务 HTTP协议是基于TCP/IP协议栈的,并且是一个面向普通文本的协议。原则上,使用任何一个文本编辑器,都可以写出一个完整的HTTP请求报文。只要搞清楚了请求报文的头部(header、请求头)和主体(body、请求体)应该包含的内容。 如果只是访问基于HTTP协议的网络服务,那么使用net/http包中的程序实体会非常方便。 http.Get函数 调用http.Get函数,只需要传递给它一个URL即可: package main import ( "fmt" "net/http" "os" ) func main() { resp, err := http.Get("http://baidu.com") if err != nil { fmt.Fprintf(os....阅读全文

博文 2019-02-10 22:35:16 骑士救兵

一个简单的 HTTP 服务器 (二) (go语言)

// http.go package main import ( "log" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) log.Println("Starting server ...") log.Fatal((http.ListenAndServe(":8888", mux))) } type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hel...阅读全文

博文 2017-04-23 13:00:41 痞子汤

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

理解服务端对 TCP 握手的处理,以及什么是 backlog

理论 握手过程 我们知道,客户端与服务端之间建立 TCP 连接需要经过三次握手的过程: 客户端向服务端发送 SYN 服务端返回 SYN + ACK 客户端发送 ACK 至于 TCP 连接为什么需要三次握手,这三次握手是怎样确保传输的可靠性的? 这个问题,交给以后专门写篇文章来讲。 而这篇文章的重点是,在这三次握手的过程中,服务端是怎样维护一个连接的? 两种状态 两个队列 一图胜千言: 站在服务端的角度来看,自 Linux kernel 2.2 之后,整个过程分为如下几个步骤: 服务端进行 listen 系统调用(上层函数可能与 listen syscall 不同名)之后,端口处于监听状态。 在第一次握手之后,服务端收到了客户端发来的 SYN 包,将该连接标记为 SYN_RCVD(半连接状态)...阅读全文

博文 2019-12-24 21:32:41 Xavier

从零开始搭建MongoDB数据库服务

摘要: 8月30号,受邀在DBAplus118期线上分享了《从零开始搭建MongoDB数据库服务》。以下为分享主要内容。 分享大纲 什么是『数据库即服务』 MongoDB 如何搭建一个MongoDB『数据库即服务』 什么是『数据库即服务』 首先介绍一下『数据库即服务』。 8月30号,受邀在DBAplus118期线上分享了《从零开始搭建MongoDB数据库服务》。以下为分享主要内容。 分享大纲 什么是『数据库即服务』 MongoDB 如何搭建一个MongoDB『数据库即服务』 什么是『数据库即服务』 _MongoDB_004_jpeg _MongoDB_005_jpeg 首先介绍一下『数据库即服务』。『数据库即服务』其实是『Database-as-a-serv...阅读全文

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

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

博文 2019-03-14 03:34:40 Lateautumn_Lin

Go基础学习记录之Session和Cookie

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

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

​使用BSN一天学会区块链开发-C#篇

作者:曹国波《使用BSN一天学会区块链开发》系列文章可以帮助具有一定开发经验的开发者,在不需要学习区块链开发语言的情况下,在区块链服务网络(BSN)上完成区块链应用的开发。本文主要介绍用户如何通过链下业务系统使用C#语言与链上数据进行交互而进行的相关操作流程说明,但在说明链下业务系统与链上进行数据交互之前,首先对用户如何在区块链服务门户注册、应用发布服务、应用服务参与以及应用管理进行一一说明。注册和登录打开区块链服务网络网址:www.bsnbase.com, 点击登录页面中的【内测申请】按钮进入内测申请页: 根据页面中的提示填写内测申请信息并提交内测申请,内测申请用户分为个人用户和企业用户两种,申请人应根据自己的用户类型任选一种进行申请, 内测申请提交后需等待系统审核,待系统审核通过后将向申...阅读全文

博文 2020-01-08 19:33:22 区块链服务网络BSN

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

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

JWT代码实现

在Go中可以直接使用github.com/dgrijalva/jwt-go简单实现Token的生成和有效性检验。 如果存在私密的文件,则需要使用使用密码对称加密。jwt生成的token在没有加密的情况下,需要使用https传输数据,确保数据安全。 更多请参考:JSON Web Token 入门教程。 下面是代码实现: package main import ( "errors" "fmt" "log" "time" "github.com/dgrijalva/jwt-go" ) type UserInfo struct { ID uint64 Username string } const SecrectStr string ="hello world" func CreateToken(u...阅读全文

博文 2019-12-02 23:34:15 大漠胡萝卜

建站宝盒到底有多大的威力令人为之痴迷?

建站宝盒是针对中小企业用户建站需求而打造的一款自助建站系统。用户只需通过在线申请账号和密码的方式建网站,不用自己上传源代码,只需登录网站管理系统即可选择网站模板风格、上传文字和图片内容、设置网站栏目、维护网站内容,其针对不同行业特点精心设计的网站栏目和网页风格。 此外,建站宝盒支持三种语言中文版网站、繁体版网站、英文版网站、运用功能强大的管理平台。建站宝盒大大节省建立网站的成本,极大地缩短了企业建站的时间。 ![5.jpg](https://static.studygolang.com/180427/a0738317884ddcaeebd9d5b132fd9a31.jpg) 简单易用 强大灵活 传统网站建设做出的网站管理后台功能简单,后期维护、网站建设周期长,修改...阅读全文

一个简单的 HTTP 服务器 (三) (go语言)

// http.go package main import ( "log" "net/http" "time" ) func main() { server := &http.Server{ Addr: ":8888", WriteTimeout: 2 * time.Second, } mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) server.Handler = mux log.Println("Starting server ...") log.Fatal(server.ListenAndServe()) } type myHandler struct{} f...阅读全文

博文 2017-04-23 13:00:41 痞子汤

1小时掌握SVN版本控制系统

课程介绍 SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。 课时列表 • 课时1:SVN的配置及使用(SVN简介) • 课时2:SVN的配置及使用(搭建SVN服务器端) • 课时3:SVN的配置及使用(配置SVN客户端) • 课时4:SVN的配置及使用(项目发布与检出) • 课时5:SVN的配置及使用(冲突解决) 开始学习http://click.aliyun.com/m/27888/...阅读全文

Golang之iOS自动化接口测试(一)需求简介

1.为什么要搞这种东西? 1.测试资源不够 ,没有时间测试iOS的需求 2.因为平时测试的不多, 所以对上报等问题总是漏测 3.会有一些改动, 会影响之前的一些上报逻辑 4.想自己跑一边所有的上报逻辑, 展示上报, 点击上报, trace上报等 2.为什么选择了Golang? 1.以前用python写过自动化的iOS app安装, 脱壳,打开,卸载等操作,想试试其他的方法. 2.考虑并尝试了privoxy , anyproxy ,对https的代理返回等都不够友好,花了很多时间没弄好,anyproxy有些https抓不到, 也不知道什么原因, 但是挺好写 3.同事跟我说要不试试golang, 看了下, 感觉可以符合需求, 还能学习新的知识点 安排 3.大致思路 1.因为我要测试的是SDK ,...阅读全文

博文 2020-04-30 21:32:54 西博尔

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

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

golang 网络编程(2)TCP

golang_real.jpg TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 说到网络编程我们先理解一个术语套接字,突破这个术语,我们就向理解 TCP 迈出了一大步。简单比喻一下吧,我们彼此间通过打电话或写信的进行哪种不是面对面的交流,套接字就是我们进行这些交流工具,电话机或是邮箱,仅此而已。 我们今天用 go 语言实现一个 TCP 通讯,go 语言对 TCP 进行封装来方便我们开发 TCP 服务。 package main import( "fmt" "io" "net" "time" ) func main() { ln, err := net.Listen("tcp...阅读全文

博文 2019-04-26 19:34:40 zidea

gRPC源码/transport/客户端 服务端

综述 http2Client实现自ClientTransport接口http2Server实现自ServerTransport接口 https://github.com/messixukej... 在liangzhiyang/annotate-grpc-go基础上补充了部分注释 客户端:http客户端连接创建 原理(引自http2-spec/HTTP2中英对照版(06-29).md at master · fex-team/http2-spec · GitHub.md)):Upon establishment of a TCP connection and determination that HTTP/2 will be used by both peers, each endpoint ...阅读全文

博文 2018-06-11 11:34:38 蓝白狂想

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

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

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

golang TCP

service.go package main import ( "net" "fmt" ) // TCP service func main() { // 1.监听本地端口 linser, err := net.Listen("tcp", "127.0.0.1:27666") if err != nil{ fmt.Println("Linsten 127.0.0.1:27666 faild, error of:", err) return } // 2.等待客户端连接 client_conn, err := linser.Accept() if err != nil { fmt.Println("conn error of:", err) return } // 3.接收客户端信息 var...阅读全文

博文 2020-05-12 01:32:52 小麦客

async.waterfall变为async/await

1. 我的工作主要是pomelo node.js后端主程,因为之前经常用async.waterfall 这个第三方async库,并且这个库也很好用,就是代码有些多,后来换工作了公司用了新框架。2. 开始大量使用async/await来开发, 或者用promise或者其他的东西,主要目的就是为了解决低于地狱回调的问题。3. 使用async/await的过程中发现一个问题,因为服务器端开发,所以对错误是很敏感的,并不允许有错误,而不去管它,当时能想到的方案有两个。其一:对用到 await的地方用try catch 方法一 其二是: 方法二 如果有多个await的话,每个都用try catch那样体验很不好,所以我经常在项目中用到的就是方法二,但是方法二也不是很好。然后我在网上找了找,还有一种方法...阅读全文

博文 2020-02-10 23:32:52 夏伊馨

基于Golang徒手写个转发代理服务

由于公司经常需要异地办公,在调试的时候需要用到内网环境,因此手动写了个代理转发服务器給兄弟们用,项目地址是:socks5proxy。 选型上,语言上就选择了Go,简单清晰,转发协议选择了socks5。 SOCKS5协议介绍 SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递,SOCKS是"SOCKetS"的缩写。 SOCKS5是SOCKS4的升级版,其主要多了鉴定、IPv6、UDP支持。 SOCKS5协议可以分为三个部分: (1) 协议版本及认证方式 (2) 根据认证方式执行对应的认证 (3) 请求信息 (1)协议版本及认证方式 创建与SOCKS5服务器的TCP连接后客户端需要先发送请求来协议版本及认证方式, VER NMETHODS METHODS 1 1 1-25...阅读全文

博文 2019-02-03 12:34:44 机械视角

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

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

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

博文 2018-09-28 18:34:42 Java架构007

详解SLB、EIP、NAT网关之间区别, 合理选择云上公网入口

摘要: 概述 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? **点此查看原文:http://click.aliyun.com/m/41840/** **开始** 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? 概念 -- **负载均衡SLB** **对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。** 可见云计算中的负载均衡除了通过流量分发让后端的服务器负载均衡,还有两个重...阅读全文

Go语言从入门到精通-04| Socket客户端与服务端

请从github下载配套代码: https://github.com/shuningzhang/learn_golang 大家都知道Web服务是基于HTTP协议的,而HTTP协议又是TCP协议上的应用层协议。因此我们在开发一个Web服务之前,我们先介绍一下如何使用Go语言开发一个基于TCP的客户端与服务端程序(关于TCP协议的原理可以参考本号之前的文章《从socket到TCP协议,透彻理解网络编程》)。 Go语言从入门到精通-04| Socket客户端与服务端 程序比较简单,服务端用于等待客户端的连接,连接建立成功后,如果接到客户端的数据,则原封不动的返回相同的数据。客户端建立与服务端的连接,连接建立成功后向服务端发送字符串数据,并等待接收服务端的返回。 服务端 前面已经介绍,服务端用于等待...阅读全文

博文 2019-03-20 00:34:41 萨泥君

理解Kubernetes网络:services篇

在本系列的第一篇文章中,研究了kubernetes如何结合使用虚拟网络设备和路由规则,以允许在一个群集节点上运行的Pod与在另一个群集节点上运行的Pod通信,只要发送者知道接收者的Pod网络即可。 IP地址。如果您还不熟悉Pod的交流方式,那么在继续之前值得一读。集群中的Pod网络很简单,但仅凭其不足以创建持久性系统。那是因为kubernetes中的Pod是短暂的。您可以将Pod IP地址用作终结点,但不能保证该地址在下次重新创建Pod时不会更改,这可能由于多种原因而发生。 您可能已经意识到这是一个老问题,并且它有一个标准的解决方案:通过反向代理/负载均衡器运行流量。客户端连接到代理,代理负责维护将请求转发到的健康服务器列表。这对代理服务器提出了一些要求:代理服务器本身必须是耐用的并且能够抗...阅读全文

分布式强一致kv缓存(1)

本人从事游戏行业,因此这个缓存系统主要针对网络游戏的数据访问模式设计。 首先分析下网络游戏的数据访问模式: 1)关系性弱:对于绝对大多数的游戏类型来说,能通过一个key来访问数据就够了。 2)读多写多:用户登录时通常需要加载大量数据,查询其它玩家信息也是一个频繁的操作请求。在不考虑定时回写的情况下,玩家的每个更新类请求都会产生一次数据库回写请求,对于一个在线10W,养成类游戏,每秒写请求达到10W+是可能的。 3)冷数据多:游戏的注册用户数和活跃用户数差距非常大。大量数据平时几乎不被访问,只有偶尔做活动用户回流时才被访问。 4)响应及时性:即使是一个查看其它用户信息的查询请求,响应时间超过200ms也是非常不友好的。 基于以上考量,我设计了一套名为flyfish的冷热缓存系统,系统设计目标如...阅读全文

博文 2019-10-15 10:02:47 sniperHW

一个简单的Golang实现的HTTP Proxy

最近因为换了Mac,以前的Linux基本上不再使用了,但是我的SS代理还得用。SS代理大家都了解,一个很NB的Socket代理工具,但是就是因为他是Socket的,想用HTTP代理的时候很不方便。 以前在Linux下的时候,会安装一个Privoxy把Socket代理转换为HTTP代理,开机启动,也比较方便。但是Mac下使用Brew安装的Privoxy就很难用,再加上以前一个有个想法,一个软件搞定Socket和HTTP代理,这样就不用安装一个单独的软件做转换了。 想着就开始做吧,以前基本上没有搞过太多的网络编程,最近也正好在研究Go,正好练练手。 我们这里主要讲使用HTTP/1.1协议中的CONNECT方法建立起来的隧道连接,实现的HTTP Proxy。这种代理的好处就是不用知道客户端请求的数...阅读全文

博文 2017-07-04 02:14:59 飞雪无情

数据抓取使用HTTP代理ip代码示例

HTTP Proxy Demo 代码1、Python#! -- encoding:utf-8 --import requests# 要访问的目标页面targetUrl = "http://ip.hahado.cn/ip"# 代理服务器proxyHost = "ip.hahado.cn"proxyPort = "39010"# 代理隧道验证信息proxyUser = "username"proxyPass = "password"proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, "user" : proxyUser, "pass" : prox...阅读全文

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简单tcp代理

使用golang网络编程实现一个简单的TCP代理(不支持HTTP) package main import ( "flag" "github.com/rs/zerolog" "net" "os" ) var logger = zerolog.New(os.Stdout).With().Timestamp().Logger() func main() { help := flag.Bool("help", false, "print usage") bind := flag.String("bind", "127.0.0.1:6000", "The address to bind to") backend := flag.String("backend", "", "The backend s...阅读全文

博文 2020-06-06 11:32:42 写个代码容易么

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

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

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

2018-08-19 说一说现在的Decentralized Storage的传输

golang是特别不适合拿来做应用层可靠协议开发的语言。所有的可靠协议都依赖于连接状态,在讲究并发的场景下,所有的状态都依赖于事件,所有的事件都依赖于内核文件描述符,问题是,在可靠场景下,我们常常需要将一个端口用作一块网卡,一块网卡可以有65536个描述符并发处理事件,一个端口却只有一个描述符,这一个描述符需要模拟出65536个描述符的事件处理效能,这本来就是令人头大的问题。golang本身的协程机制----固然golang和大多数的协程实现不尽一致----导致每一个事件的处理都应短暂,且事件之间应是无状态的,如果对于可靠协议各阶段的业务与事件理解不到位,极其容易实现出资源有余,而协议效能低下的情况。为什么要有上面一段呢?因为目前的Sia,IPFS,Storj,Swarm都是golang实现...阅读全文

用Go实现Redis之四实现Redis的协议交互

写在前面 本文实现的Godis代码版本为:v0.0.3 在前三篇文章中,实现了客户端/服务端的交互(基于textprotoco)、服务端初始化和get/set命令。如果阅读过或者调试过粗略的代码实现,会发现使用文本协议进行交互,除了容易阅读之外,解析效率是比较低下的。因为我们的示例是"set alpha 123n",工整的单个空格和n分割,可能在分割上效率还好;既要分割,不免低效。 在本文,将替换文本协议为Redis1.2版本后的统一协议。 Redis通信协议 Redis通信协议解析高效、二进制安全,同时也对人类友好(可直接阅读解析)。 协议格式 Redis在发送命令和返回结果中均使用同一套标准协议。Reids协议“肉眼可辨”,在发送命令是使用类型为"multi bulk reply"的协议...阅读全文

博文 2018-06-18 15:34:41 alphali

Golang简介

Go 语言教程 image Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、数组安全、编译迅速 Go 语言用途 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供...阅读全文

博文 2019-07-20 22:32:40 7x24run

golang入门案例之SOCKET

//服务端代码package main import ( "fmt" "net" "log" "os" "encoding/binary" ) func main() { //建立socket,监听端口 netListen, err := net.Listen("tcp", "localhost:8090") CheckError(err) defer netListen.Close() Log("Waiting for clients") for { conn, err := netListen.Accept() if err != nil { continue } Log(conn.RemoteAddr().String(), " tcp connect success") handle...阅读全文

博文 2018-01-17 19:30:00 nazhizq

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

Go语言实践_实现一(客户端)对一(服务器端)聊天室

一、目的 使用Go语言实现一个服务器端与客户端的聊天室。 软件:Goland,Go1.9 代码仓库地址 二、思路 1,首先启动服务器端,使用listen_socket函数监听IP地址上的客户端连接; 2,启动客户端,并向服务器端发送数据,发送结束后端口阻塞,等待服务器端的消息; 3,服务器端接收到由客户端发送来的消息; 4,服务器端向客户端发送数据,发送结束后; 5,客户端接收到由服务器端发送来的消息,发送结束后端口阻塞,等待客户端的消息; 6,重复步骤2-5; 7,如果服务器端接收到由客户端发送来的“close"消息后,服务器端关闭与客户端的连接,继续等待下一个客户端的连接; 8,客户端关闭,聊天结束。 三、Go代码实现 Sever端 // One-to-one ChatRoom Seve...阅读全文

博文 2018-08-08 00:30:00 OctoptusLian

游戏分布式服务器 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