go操作kafka
go操作kafka本文使用的是kafka-go这个库,执行下面的命令安装
1go get github.com/segmentio/kafka-go
下面是常见的使用方式。
1.连接到Kafka12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364package controllerimport ( "context" "fmt" "log" "net" "strconv" "time" "github.com/segmentio/kafka-go")// 连接到leaderfunc Connection() { conn, err := kafka.DialLeader(context.Background(), "tcp", add ...
zookeeper安装
zookeeper安装zookeeper安装需要有Java环境,如何配置可参考本站文章《Java_sdk安装》。
1.本地安装1.1.解压安装本地安装,适用于本地开发调试使用。自动化安装脚本如下:
12345678910111213141516171819202122232425262728293031#!/bin/bash# zookeeper下载地址zk_addr="https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz"# zookeeper的安装路径zk_home="/test/zk"# 创建安装目录mkdir -p $zk_homeif [ "$?" != "0" ]; then echo 'create file failed!' exit 1fi# 下载安装包wget $zk_addrif [ "$?" != "0" ...
Java_sdk安装
Java_sdk安装自动化安装脚本如下,官网下载好Java sdk包后,配置好存放路径和安装路径,执行即可。
123456789101112131415161718192021222324252627282930313233343536#!/bin/bash# Java sdk包存放路径java_addr=""# Java sdk的安装路径java_home=""# 创建安装目录mkdir -p $java_homeif [ "$?" != "0" ]; then echo 'create file failed!' exit 1fi# 解压安装包tar -zxvf $java_addr $java_homeif [ "$?" != "0" ]; then echo 'decompression file failed!' exit 1fi# 配置Java环境变量name=$(ls $java_home ...
Kafka安装
Kafka安装Kafka安装需要有Java和zookeeper环境,如何配置可参考本站文章《Java_sdk安装》和《zookeeper安装》。
1.本地安装1.1.解压安装本地安装,适用于本地开发调试使用。自动化安装脚本如下:
12345678910111213141516171819202122232425262728293031#!/bin/bash# kafka下载地址kafka_addr=""# kafka的安装路径kafka_home="/test/kafka"# 创建安装目录mkdir -p $kafka_homeif [ "$?" != "0" ]; then echo 'create file failed!' exit 1fi# 下载安装包wget $kafka_addrif [ "$?" != "0" ]; then echo 'download failed!' exit 1fi# ...
图论模板
图论模板1.树与图的存储12345678910111213141516171819202122232425262728293031323334package searchandgraph/*树是一种特殊的图,与图的存储方式相同对于无向图中的边ab,存储两条有向边a->b,b->a,因此可以只考虑有向图的存储1.邻接矩阵:g[a][b]存储边a->b2、邻接表:如下*/// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头节点.n表示点数,m表示边数var ( h []int e []int ne []int idx int n, m int)// 初始化func init() { idx = 0 for i := 1; i <= n; i++ { h[i] = -1 }}// 添加一条边a->bfunc Add(a, b int) { e[idx] = b ne[idx] = h[a] h[a] = idx idx++}
2.树与图的遍历1234 ...
数据结构模板
数据结构模板1.单链表1234567891011121314151617181920212223242526272829303132package datastructure// 静态链表// head存储链表头,e存储节点的值,ne存储节点的next指针,idx表示当前用到了哪个节点var ( head int e []int ne []int idx int)// 初始化func init() { head = -1 idx = 0}// 在链表头插入一个数afunc Inserthead(a int) { e[idx] = a ne[idx] = head head = idx idx++}// 将头节点删除func Removehead() { if head != -1 { head = ne[head] }}
2.双链表1234567891011121314151617181920212223242526272829303132package datastructurevar ( ...
基础算法模板
基础算法模板1.快速排序1234567891011121314151617181920212223242526package basicfunc QuickSort(q []int, l, r int) { if l >= r { return } i, j, x := l-1, r+1, q[l+r>>1] for i < j { for q[i] < x { i++ } for q[j] > x { j-- } if i < j { q[i], q[j] = q[j], q[i] } } QuickSort(q, l, i) QuickSort(q, i+1, r)}
2.归并排序123456789101112131415161718192021222324252627282930313233343536373839package basicfunc MergeSort(q []int, l, ...
go-rpc编程
go-rpc编程RPC(remote procedure call protocol)-远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解低层网络技术的协议。它假定某些传输协议的存在,如TCP或UDP,以便为通信程序之间携带信息数据。通过它可以使得函数调用模式网络化。
1.RPC工作原理运行时,一次客户机对服务器的RPC调用,其内部操作大致有如下十步:
调用客户端句柄,执行传送参数
调用本地系统内核发送网络消息
消息传送到远程主机
服务器句柄得到消息并取得参数
执行远程过程
执行的过程将结果返回服务器句柄
服务器句柄返回结果,调用远程系统内核
消息传回本地主机
客户句柄由内核接收消息
客户端接收句柄返回的数据
2.go实现RPC调用go标准库提供了对RPC的支持,并支持三个级别的RPC:TCP、HTTP、JSONRPC。但是go的rpc包只支持go开发的服务器与客户端之间的交互,因为在内部,他们采用了Gob来编码。
go rpc的函数只有符合下面的条件才能被远程访问:
函数必须是导出的(首字母大写)
必须有两个导出类型的参数,第一个参数是接收的参数,第二个参 ...
go-WebSocket编程
go-WebSocket编程WebSocket是HTML5的重要特性,它实现了基于浏览器的远程socket,它使浏览器和服务器可以进行全双工通信。
在WebSocket出发之前,为了实现及时通信,采用的技术都是“轮询”,即在特定的时间间隔内,由浏览器对服务器发出HTTP Request,服务器在收到请求后,返回最新的数据给浏览器刷新,“轮询”使得浏览器需要对服务器不断发出请求,这样会占用大量的带宽。
WebSocket采用了一些特殊的报头,使得浏览器和服务器只需要做一个握手的动作,就可以在浏览器和服务器之间建立一条连接通道。且此连接会保持在活动状态,可以使用JavaScript来向连接写入或从中接收数据。相比传统的HTTP有如下好处:
一个Web客户端只建立一个TCP连接
WebSocket服务端可以推送数据到web客户端
有更加轻量级的头,减少数据传输量
1.WebSocket客户端1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<!DOCTYPE ht ...
go-Socket编程
go-Socket编程1.什么是Socketsocket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都是可以用“打开open –>读写write/read–>关闭close”模式来操作。socket就是该模式的一个实现,套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
常用的socket类型有两种:流式Socket(sock_stream)和数据报式Socket(sock_drgam)。流式是一种面向连接的socket,针对于面向连接的TCP服务;数据报式socket是一种无连接的socket,对应于无连接的UDP服务应用。
2.TCP Socket2.1.TCP Client12345678910111213141516171819202122package clientimport ( "fmt" "io" "net")f ...