202201-12 golang-websockets客户端实现和压测方法 NEW 简介使用到的包:github.com/gorilla/websocket案例package main import ( "fmt" "github.com/gorilla/websocket" "log" ... Read More >
202201-11 golang中redis对redigo的发布订阅机制的使用 NEW redigo 对redis的订阅机制放在pubsub.go里面PubSubConn封装Conn以实现订阅者提供简便方法。Subscribe,PSubscribe,Unsubscribe和PUnsubscribe方法发送和刷新订阅。receive方法将推送的消息转换对应的类型// Receive returns a pushed message as a Subscription, Mes... Read More >
202201-10 gorilla/websocket包方法汇总 NEW 获取 Conn 实例的方法func (u *Upgrader) Upgrade(w http.ResponseWriter,r *http.Request,responseHeader http.Header)(*Conn , error) 方法 必须通过 Upgrader结构体的实例调用 方法必须传递 w http.ResponseWriter 和 r *http.Req... Read More >
202201-09 高效的IM长连接自适应心跳保活机制 认识长连接长连接的主要作是通过长时间保持双方连接,从而:提高通信速度;确保实时性;避免短时间内重复连接所造成的信道资源和网络资源的浪费。长连接与短连接的区别导致长连接断开的原因1. 长连接所在进程被杀死(这主要说的是移动端);2. NAT超时;3. 网络状态发生变化;4. 其他不可抗因素(网络状态差、DHCP的租期等等 )。下面,我将对每种原因进行分析。具体分析1)原因1:进程被杀死当进程被杀死后,长连接也会随之断开。进程被杀在Andriod端是最常见的问题,限于篇幅就不在此... Read More >
202201-08 长连接为什么需要心跳检测 背景首先,无论是自己设计的长连接还是websocket长连,都需要自己设计心跳机制来维持长连。从应用层协议来看,维持一个建立连接的必要条件似乎就是客户端和服务端均维持双方的连接信息,均用一个结构体来描述连接五元组(协议+源ip+源端口+目的ip+目的端口)。那么,是不是只要双方在应用层保证双方的连接信息不被清掉,就可以一直维护长连接呢。答案自然是否定的,长连接都是建立在TCP协议上的,所以我们先要了解操作系统是如何维护TCP协议连接状态的。TCP 连接状态所谓的TCP连接不是... Read More >
202201-07 开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构 产品体验地址web端体验地址:http://121.37.25.71:23232/pc端下载: https://pan.baidu.com/s/16MW36rKVFtDCBewMOdD0pA 密码: jd15安卓下载:https://www.pgyer.com/OpenIM官方文档:https://doc.rentsoft.cn/github地址:https://github.com/OpenIMSDK/Open-IM-Server网上有很多关于IM的教程... Read More >
202201-06 关于股票除权复权,前复权、后复权、不复权 除权:简单讲就是 让市场上可以流通的股票变多了,每股的权益变少叫除权。假设某公司的总股本100股,每股10元,总权益就是1000元。当公司进行送股,每10股转送10股,总股本就变成了200股,而公司的总权益并没有变,于是每股价格就要变成1000/200=5元。这就是除权。复权:两股合成一股,叫复权,回复股票权利。当股价因送股、配股等原因而发生下跌时,原来10元/股的股票瞬间变成了5元/股,但该股票实际价值并没有发生变化,也就是说现在的5元实际上还是相当于10元。这就是复权。&... Read More >
202201-05 随机指标(KDJ)的计算方法和golang实现 KDJ指标的定义KDJ的另外一个名字叫随机指标,最早是以KD指标的形式出现,而KD指标是在威廉指标的基础上发展起来的,目前是金融市场上最常用的技术分析工具之一。KDJ 指标的原理利用当前股价(包括大盘指数,下同)在近期分布中的相对位置来预测可能发生的趋向拐点。它是利用市场价格真实的波动来反映价格走势的强弱以及超买超卖现象,从而在价格尚未出现明显的上升或下降之前提前发出交易信号,它是捕捉市场价格即将要发生拐点的一种技术工具。KDJ指标的计算方法KDJ指标是一种常用的价格走势判断... Read More >
202201-05 股票中MACD如何计算golang版本 概念 MACD称为指数平滑移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。当MACD从负数转向正数,是买的信号。当MACD从正数转向负数,是卖的信号。当MA... Read More >
202201-04 go自定义包引入,报错包找不到的问题 背景从github下载了一个项目想运行下,发现找不到自己写的包,一直报错build command-line-arguments: cannot find module for path xxx目录结构stockIndicator indicator price.go &nb... Read More >
202201-03 livego介绍、安装、使用详解 前言写这篇文章主要是因为希望找到一个简单的方式实现直播功能,在度娘上找到livego(我平时写php和前端的,不懂golang),感觉安装部署都很方便,即使不懂golang的同学,只要有一定Linux和web后端开发知识都能搭建自己的直播服务。但是livego的文档的确比较少,然后对于我这个面向搜索引擎开发的菜鸟来说,连度娘也只找到为数不多的几篇相关博客文章,所以最后只能自己看GitHub的issue和反复测试趟坑,最后打算记录一下自己的趟坑过程也分享一下给各位小伙伴,希望对... Read More >
202201-02 什么是OBS(OBS直播推流操作步骤,看完就懂) 什么是 OBS? Open Broadcaster Software 是一款好用的互联网流媒体直播内容输入作软件。 OBS 使用是否收费? 不收费,这个程序和它的源代码都是免费的。 OBS 都支持哪些操作系统? 支持 OS X、Windows、Linux 操作系统。适用于多种直播场景。满足大部分直播行为的操作需求。 一、前期准备 直播间布置 参考:直播间布置手册:https://www.yuque.com/docs/share/555b3... Read More >
202201-01 一篇文章搞清楚直播协议RTMP 说起RTMP协议,相信很多人都比较陌生,这个协议相对HTTP、HTTPS、TCP等我们常见的协议而言,我们在工作中确实较少接触它,但是对现在如火如荼的直播行业,RTMP是一个重要的协议,它在实时音视频场景中使用非常广泛,而且目前市占率很高。本文的主要内容是分析RTMP的协议,当然不是纯理论分析,这样没多大意思,还是结合实践抓包文件来具体分析,这样才能较好地理解RTMP的内涵。具体如何抓包见本文末尾的“Android抓包”模块。希... Read More >
202102-13 正确理解golang中的time.Duration 在传递时间参数的时候,很多函数的参数类型是time.Duration官方解释:Duration 将两个瞬间之间的经过时间表示为 int64 纳秒计数。 该表示将最大可表示持续时间限制为大约 290 年。默认是纳秒单位如果想传递一个10秒的时间进去,需要这样转换,其实就是把我们传递的整型进行了乘法second := 10 time.Duration(seconds)*time.Secondtime.Second是一个常量const ( &nbs... Read More >
202102-12 gin集成ElasticSearch操作库 介绍Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎。1.集成流程2.安装这... Read More >
202102-11 如何在golang中用rand生成随机不重复的数字 背景如何在golang中用rand生成随机不重复的数字?其实要解决这个问题也不难,这篇文章给出了相对应的分析和解答,下面我们一起来看看解决的方法。在Golang中,有两个包提供了rand,分别为 "math/rand" 和 "crypto/rand", 对应两种应用场景。一、"math/rand" 包实现了伪随机数生成器。也就是生成 整形和浮点型。二、”crypto/rand“ 包实现了用于加解密的更安全... Read More >
202102-10 golang之中文和unicode字符之间转换 Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。在实际应用有很多需要中文和unicode转换的场景,这里主要介绍通过golang实现中文和unicode互相转换。1、中文转unicodepackage main import ( "fmt" &q... Read More >
202102-09 golang使用纯真IP数据库获取地理位置(推荐) 准备工作(纯真IP数据库下载)纯真IP官网:https://www.cz88.net/进入官网后 找到 纯真社区版IP库离线版免费下载 :https://www.cz88.net/geo-public 扫码获取最新的下载地址下载完成后进入下载文件安装下载好的exe文件,安装完成后打开项目安装根目录,将qqwry.dat文件复制到golang项目中依赖mahonia 处理 GBK 编码的地址信息go get code.google.com/p/ma... Read More >
202102-08 golang项目监听6000端口浏览器无法访问 背景最近新开了一个项目 基于gin搭建,端口监听了6000,发现接口无法访问谷歌浏览器报错如下:问题分析查看端口占用情况netstat -lnp |grep 6000windows 用下面的命令netstat -ano | findstr "6000"发现并没有被占用,程序启动也没有任何报错其实不止 6000,如果你配置成 6666 ,也是无法访问成功的首先,当我们将项目的端口设置为 6... Read More >
202102-07 golang使用 geoip库, 通过ip 获取国家,省市,城市 Github: https://github.com/oschwald/geoip2-golang1.进入后,开头部分会告诉下载ip库,打开页面https://dev.maxmind.com/geoip/geoip2/geolite2/找到下载地址也就是下载地址:http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz下载完成后解压,我的地址为:/www/test/ip/GeoLi... Read More >