<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[thjwsw的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/thjwsw</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; thjwsw]]></copyright><item><title><![CDATA[Grafana Labs线上交流问卷调查]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/128824972</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/128824972</guid><author>thjwsw</author><pubDate>Tue, 31 Jan 2023 23:04:36 +0800</pubDate><description><![CDATA[大家好，过去半年 Grafana 学习小组的内容输出，得到了 Grafana Labs 的认可。为了更好帮助国内朋友使用Grafana 相关产品，我们准备联合 Grafana Labs 的工程师开展一场线上技术交流，故制作话题调查问卷一份，感兴趣的朋友辛苦帮忙填写一下，多谢🙏



https://www.wjx.cn/vm/ro3Re79.aspx
]]></description><category></category></item><item><title><![CDATA[prometheus/tsdb index索引格式规范]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/119103348</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/119103348</guid><author>thjwsw</author><pubDate>Mon, 26 Jul 2021 10:46:49 +0800</pubDate><description><![CDATA[内容源于

https://ganeshvernekar.com/blog/prometheus-tsdb-persistent-block-and-its-index/

比如一个metrics的格式如下：

cpu{host=“computer",ip="1.2.3.4",systerm="64bit"} timestamp=xxx, value=12

index总体格式分为：

{}内部的str信息保存。即， symbol_table


...]]></description><category></category></item><item><title><![CDATA[prometheus/tsdb压缩流程]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/118891312</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/118891312</guid><author>thjwsw</author><pubDate>Mon, 19 Jul 2021 11:31:09 +0800</pubDate><description><![CDATA[tsdb/compact.go

populateBlock

 indexr,chunkr,tombsr读blocks信息到内存


for sumbols.Next()
   indexw.AddSymbols()//读所有symbol信息，并写入index文件。经过此步骤，当前index文件中只有symbols信息。

结合tsdb官方的index 格式进行理解，https://ganeshvernekar.com/blog/prometheus-tsdb-persistent-block-an...]]></description><category></category></item><item><title><![CDATA[【openresty】【子请求】使用capture进行子请求（一）]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/114399187</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/114399187</guid><author>thjwsw</author><pubDate>Tue, 09 Mar 2021 22:21:56 +0800</pubDate><description><![CDATA[上一节介绍了，当有请求http://127.0.0.1/userid/play/live/01.m3u8进入时，如何通过content_by_lua进行url解析，并返回一个ts信息。但在实际使用中，ts信息一般是放在后台服务器上的。这个时候，就要在原有的请求中，发起一个子请求。

谈到子请求，我们先从capture认识子请求的基本面貌。从官方文档看到，https://github.com/openresty/lua-nginx-module#ngxlocationcapture

可以看到小demo如下，]]></description><category></category></item><item><title><![CDATA[【openresty】【实例】使用content_by_lua_file解析一个直播请求url]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/114065369</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/114065369</guid><author>thjwsw</author><pubDate>Thu, 25 Feb 2021 17:27:21 +0800</pubDate><description><![CDATA[现在，服务端收到客户的一个url请求如下：

http://127.0.0.1/$userid/play/live/01.m3u8

1、对请求url进行正则校验，如果正则合法，就放通。正则非法就拒绝服务。

2、拿到这个请求后，先校验$userid合法性，比如是1000以下为合法。

3、所有检查满足要求后，返回一个01.m3u8的内容，类似如下：


#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,htt...]]></description><category></category></item><item><title><![CDATA[【openresty】使用luajit处理请求（一）]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/114014219</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/114014219</guid><author>thjwsw</author><pubDate>Wed, 24 Feb 2021 19:05:48 +0800</pubDate><description><![CDATA[1、前提

LuaJITis enabled by default sinceOpenResty1.5.8.1。所以上一篇文章中，configure 没有添加--with-luajit 选项。

查看nginx中使用的lua函数，https://www.nginx.com/resources/wiki/modules/lua/ 

2、nginx使用的lua关键函数

content_by_lua_block

修改nginx.conf文件，如下：

  location / {
  ...]]></description><category></category></item><item><title><![CDATA[【openresty】openresty 下载与安装]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/114000734</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/114000734</guid><author>thjwsw</author><pubDate>Tue, 23 Feb 2021 19:39:29 +0800</pubDate><description><![CDATA[1、下载源码和依赖：

虚拟机linux环境为：14.04.1-Ubuntu

openresty源码，http://openresty.org/cn/download.html,找到源码后，下载到linux环境，比如/opt目录下，tar -zxvf openresty-1.15.8.1.tar.gz 解压



此时先不要编辑，因为openresty还有一些依赖项需要安装。将要使用的编译参数为：
./configure --with-debug --prefix=/opt/openresty/ --u.]]></description><category></category></item><item><title><![CDATA[使用react做一个简易图书管理系统]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/111994888</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/111994888</guid><author>thjwsw</author><pubDate>Wed, 30 Dec 2020 17:45:18 +0800</pubDate><description><![CDATA[使用react+ant+flask实现简易图书管理系统近期使用react做了一次小的demo使用route布局页面用户登录认证 admin.js采用axios给后端发请求查询信息展示，通过ant的table实现
近期使用react做了一次小的demo
简易图书管理系统，包含用户登录校验、图书查询、新增书籍，用户密码修改。最终源码会有链接。
使用route布局页面
脚手架搭好后，在App.js中定义各个功能跳转接口，如下：







同时，在登录首页，定义各个功能跳转函数，如下：
async login(]]></description><category></category></item><item><title><![CDATA[react 初次部署]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/110851284</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/110851284</guid><author>thjwsw</author><pubDate>Tue, 08 Dec 2020 10:10:01 +0800</pubDate><description><![CDATA[react安装

1、下载官方node.js编译好的文件，

https://nodejs.org/en/

2、解压后，根据linux实际环境变量，执行

ln -s /root/node-v14.15.1-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v14.15.1-linux-x64/bin/npm /usr/local/bin/npm
ln -s /root/node-v14.15.1-linux-x64/bin/npx /usr/]]></description><category></category></item><item><title><![CDATA[从linux源码，跟踪epoll的ET/LT模式下，事件如何处理]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/109329430</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/109329430</guid><author>thjwsw</author><pubDate>Wed, 28 Oct 2020 18:51:18 +0800</pubDate><description><![CDATA[之前项目中用到的epoll，大部分都是epoll的ET模式。在实际测试中，对于epoll的LT模式，也发现一些坑，近期打算结合linux源码，深入理解一下背后的逻辑。

1、一个异常现象

服务端用epoll LT模式，主函数起10个进程，接收客户端请求。客户端用webbench模拟请求。strace发现有accept异常。



2、epoll事件流的变化

2.1 epoll事件添加到哪里去？添加到fd事件来源对应的socket中

以上面socket为例，epoll_ctl 添加事件的linux关键调]]></description><category></category></item><item><title><![CDATA[nginx+rtmp直播使用VLC播放出现播放延迟几秒分析]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/108368270</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/108368270</guid><author>thjwsw</author><pubDate>Wed, 02 Sep 2020 19:28:27 +0800</pubDate><description><![CDATA[1、参考https://blog.youkuaiyun.com/fantasy_ARM9/article/details/78150804

这个帖子里面有一点不太赞同，下面out_pos有队列长度，且按照0-&gt;255-&gt;0的规则去增长。这个队列是表示待发送队列，且一定是累加增长的。因为ffmpeg推送的数据，肯定一直向rtmp服务器发送，假设按照350kbit/s的速率发过来，rtmp本身会设置chunksize，一般是8192附近,所以接收队列会源源不断有数据进入。但是这个数据不会导致播放延迟几秒。

]]></description><category></category></item><item><title><![CDATA[ubuntu+nginx+rtmp搭建简易直播环境]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/108339684</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/108339684</guid><author>thjwsw</author><pubDate>Wed, 02 Sep 2020 19:06:38 +0800</pubDate><description><![CDATA[1、ubuntu打开摄像头
虚拟机打开Camare功能，查看/dev/video1设备
ffmpeg -f video4linux2 -framerate 20 -video_size 640*480 -i /dev/video0 -f flv rtmp://192.168.27.129/live

2、nginx启动，
/usr/local/nginx/sbin/nginx -s reload

3、电脑端/手机端打开vlc，访问
rtmp://192.168.1.113:8091/live

当电脑端.]]></description><category></category></item><item><title><![CDATA[python 抓取https豆瓣电影信息]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/107714420</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/107714420</guid><author>thjwsw</author><pubDate>Fri, 31 Jul 2020 15:38:54 +0800</pubDate><description><![CDATA[1、豆瓣网址为https,python需要模拟浏览器行为，添加请求头信息，

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
            'Chrome/51.0.2704.63 Safari/537.36'}

2、打开开发者工具，对信息进行提取

2.1定位到电影信息头，先把关注的信息提取出来



tab...]]></description><category></category></item><item><title><![CDATA[python 抓取城市7日天气]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/107707050</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/107707050</guid><author>thjwsw</author><pubDate>Fri, 31 Jul 2020 10:59:07 +0800</pubDate><description><![CDATA[1、首先打开气象网址，http://www.weather.com.cn/weather/101190101.shtml，打开开发者工具，

1.1可以看到7日的天气所在位置：



1.2 具体每日的天气属性 ，在li class中，



2、使用 python库函数获取网页信息

url = 'http://www.weather.com.cn/weather/101190101.shtml'
webpage = req.urlopen(url) # 根据超链访问链接的网页
data = webpa.]]></description><category></category></item><item><title><![CDATA[sentinel发起failover命令，slave切换成master的过程]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/107614528</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/107614528</guid><author>thjwsw</author><pubDate>Mon, 27 Jul 2020 16:18:51 +0800</pubDate><description><![CDATA[sentinel发起failover命令
sentinelFailoverStateMachine
 sentinelFailoverSelectSlave

日志：
2837:X 27 Jul 2020 10:45:09.636 # +selected-slave slave 192.168.27.128:6479 192.168.27.128 6479 @ mymaster 192.168.27.128 6379
2837:X 27 Jul 2020 10:45:09.636 * +failove...]]></description><category></category></item><item><title><![CDATA[redis sentinel三种消息类型流程理解]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/107164009</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/107164009</guid><author>thjwsw</author><pubDate>Mon, 06 Jul 2020 17:43:47 +0800</pubDate><description><![CDATA[sentinel探测消息，有ping,hello,failover三类。根据源码，画了下面的xmind流程图

ping是为了保活检查。

hello通道是下发master的config配置。

failover是为了进行容灾切换。

sentinelEvent函数，不是业务流程交互环节。

参考信息：http://www.blogjava.net/jinfeng_wang/archive/2016/12/14/432108.html








...]]></description><category></category></item><item><title><![CDATA[zynq 文件系统在sd卡启动，需要注意的一些事项]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/106544712</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/106544712</guid><author>thjwsw</author><pubDate>Thu, 04 Jun 2020 13:57:33 +0800</pubDate><description><![CDATA[1、zynq对应的内核，是把bootargs写到u-boot代码中，需要修改bootargs参数，改成从sd分区2读取文件系统。重新编译uboot

1.1 进入u-boot，打开include/configs/zynq-common.h，将sdboot的参数修改如下：即，去除原来在分区1读取ramdisk的命令，修改bootm，去除ramdisk部分。[1]


 "sdboot=if mmcinfo; then " \
            "run uenvboot; " \
           ]]></description><category></category></item><item><title><![CDATA[bmp文件格式初探]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/106019407</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/106019407</guid><author>thjwsw</author><pubDate>Sat, 09 May 2020 15:39:26 +0800</pubDate><description><![CDATA[1、下载bmpinfo.exe小工具，看bmp文件的概览信息。



看到文件类型4d42,数据离起始偏移量，54位，这里是指54字节。其他字段自行搜资料。

2、查找像素点信息。使用hex编辑器即可，



这里再看一下，宽度和长度 512像素，占用4字节，且是小端存储（低地址，存放低位）。

因为数据偏移量是54字节，所以真正的像素数据，从0x36开始。

这是，37,51,9e表示的是哪个位置的数据？通过1中的bmpinfo，获取到的像素有问题，不确定其他使用场景如何。

然后通过photoshop工]]></description><category></category></item><item><title><![CDATA[redis slave请求master进行数据同步]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/104344367</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/104344367</guid><author>thjwsw</author><pubDate>Sun, 16 Feb 2020 21:44:11 +0800</pubDate><description><![CDATA[1、slave启动后，在serverCron函数中,定时发起数据同步请求。

日志：

54489:S 16 Feb 2020 11:50:12.863 * MASTER &lt;-&gt; REPLICA sync started
54489:S 16 Feb 2020 11:50:12.863 * Non blocking connect for SYNC fired the event.
5...]]></description><category></category></item><item><title><![CDATA[redis 服务端处理客户端命令行的epoll事件执行过程分析]]></title><link>https://blog.youkuaiyun.com/thjwsw/article/details/104299909</link><guid>https://blog.youkuaiyun.com/thjwsw/article/details/104299909</guid><author>thjwsw</author><pubDate>Thu, 13 Feb 2020 22:24:15 +0800</pubDate><description><![CDATA[1、客户端链接

redis服务端启动时，在_anetTcpServer进行socket,bind,listen步骤时，建立一个监听的sock fd0。并把这个fd0 添加到epoll监听事件。设置的回调函数中，fe-&gt;rfileProc=acceptTcpHandler

  if (mask &amp; AE_READABLE) fe-&gt;rfileProc = proc;
 ...]]></description><category></category></item></channel></rss>