202204-21 Git不要只会pull和push,试试这5条提高效率的命令 NEW 前言使用 Git 作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅的方式解决。本文分享我在开发工作中实践过的实用命令。这些都能够大大提高工作效率,还能解决不少疑难场景。下面会介绍命令,列出应用场景,手摸手教学使用,让同学们看完即学会。stash官方文档git 教程描述官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。... Read More >
202204-13 使用fastcgi_finish_request 处理耗时的任务 NEW 背景我们业务中经常遇到这样的场景:比如生成文件较大的excel ,非常耗时,有可能需要5到30妙的时间,甚至更长导致浏览器连接超时。另外一个就是体验问题,用户需要长时间的等待响应的完毕,体验较差。类似的场景还有1:需要处理大的文件2:发送邮件或短信,尤其是需要循环发送邮件通知等3:调用远程耗时的api 等遇到这种情况,如果您的服务器使用的也是nginx ,那么可以考虑使用下面的函数fastcgi_finish_request();该函数的作用:理解发送响应给浏览器,这样用户的... Read More >
202204-08 PHP如何将十进制转换为十六进制?(代码示例) NEW 背景在PHP中可以通过使用内置函数dechex()或base_convert() 函数来将十进制转换为十六进制。下面本篇文章就来给大家介绍一下dechex()和base_convert() 函数是如何将十进制转换为十六进制的方法一:使用dechex()函数将十进制转换为十六进制dechex()函数是PHP中的一个内置函数,用于将给定的十进制数转换为等效的十六进制数。函数名称中的“dechex”一词代表十进制到十六进制。注: dechex()函数仅适用于无符号数。如果传递给它的... Read More >
202203-21 Redis官方可视化工具RedisInsight功能真心强大 背景最近逛了一下Redis官方网站,发现Redis不仅推出了很多新特性,而且还发布了一款可视化工具RedisInsight。试用了一下感觉非常不错,最关键的是能支持RedisJSON之类的新特性,这是第三方工具无法比拟的。今天带大家体验一下RedisInsight,确实非常好用!RedisInsight简介RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、... Read More >
202201-13 redis延迟队列golang高效实践 一、背景业务中经常会有这样的场景:到期后自动执行指定操作;查询某个任务是否完成,未完成等待一定时间再次查询;回调通知,当回调失败时,等待后重试;等等还有其他很多类似的场景。很多时候我们会直接通过一个本地定时器来帮我们完成这个任务。如果我们的系统是多实例分布式的,本地定时器就会面临很多问题,如:怎么保证重复处理的问题;统一管控的问题等等。面对本地定时器遇到的问题,我们可以使用分布式延迟队列来实现。这里介绍一种使用golang基于redis实现延迟队列的具体实践。二、实现原理1、... Read More >
202201-12 golang-websockets客户端实现和压测方法 简介使用到的包:github.com/gorilla/websocket案例package main import ( "fmt" "github.com/gorilla/websocket" "log" ... Read More >
202201-11 golang中redis对redigo的发布订阅机制的使用 redigo 对redis的订阅机制放在pubsub.go里面,PubSubConn封装Conn以实现订阅者提供简便方法。Subscribe,PSubscribe,Unsubscribe和PUnsubscribe方法发送和刷新订阅。receive方法将推送的消息转换对应的类型// Receive returns a pushed message as a Subscription, Me... Read More >
202201-10 gorilla/websocket包方法汇总 获取 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 >
202111-23 supervisorctl 非root用户调用权限最终原因 背景用supervisor来守护服务器程序, 但使用非root用户云调用supervisorctl来操作程序时, 总是提示权限问题[www@super-test ~]$ supervisorctl status error: <class 'PermissionError'>, [Errno 13] Permission denied: file:... Read More >
202111-22 oom-killer详解和实战 作为Linux下的程序员,有时不得不面对一个问题,那就是系统内存被用光了,这时当进程再向内核申请内存时,内核会怎么办呢?程序里面调用的malloc函数会返回null吗?为了处理内存不足时的问题,Linux内核发明了一种机制,叫OOM(Out Of Memory) killer,通过配置它可以控制内存不足时内核的行为。OOM killer当物理内存和交换空间都被用完时,如果还有进程来申请内存,内核将触发OOM killer,其行为如下:1.检查文件/proc/sys/vm/pa... Read More >