<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[happyfly的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/king_kgh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; king_kgh]]></copyright><item><title><![CDATA[kong 自定义插件access中获取真实代理的target]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/119457352</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/119457352</guid><author>king_kgh</author><pubDate>Fri, 06 Aug 2021 16:13:54 +0800</pubDate><description><![CDATA[这个标题真的很难起，我在产生这个需求的时候，真是各种方式搜索了各种平台，都没有找到答案。最终在硬磕了几天之后，终于在kong源码中找到了解决方案。于是，我决定把我遇到的这个问题记录下来，但是，这个时候困扰我的就是，标题该如何定，才能容易被搜索到。

需求：

在kong的插件中，我要获取到真实代理的target，就是要找到最终请求IP和port，然后由我发送请求到这些IP上，不走nginx的代理了。

这真是奇葩的需求，但这需求还真不少！！

需求了解清楚了之后，就是要如何解决了，当了解方案之后，回过来看，]]></description><category></category></item><item><title><![CDATA[lua 字符串常用操作 - split contains lower upper]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/119455835</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/119455835</guid><author>king_kgh</author><pubDate>Fri, 06 Aug 2021 15:47:38 +0800</pubDate><description><![CDATA[lua中对于字符串的操作是非常频繁的，如果你熟悉一种编程语言，那么你在编写lua代码的时候一定会想，在Java中支持的字符串切分split，在lua中是否支持呢？这里就给大家整理了一些lua中常见的字符串操作。

整理6个常用方法：转大写、转小写、是否包含、反转、split切割

1、字符串转小写 string.lower()


-- 定义一个字符串
local s = "abcDeF";
-- 字符串转小写
local trans = string.lower(s);

print(trans); --]]></description><category></category></item><item><title><![CDATA[linux下运行lua脚本]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/117223221</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/117223221</guid><author>king_kgh</author><pubDate>Mon, 24 May 2021 14:50:18 +0800</pubDate><description><![CDATA[在linux下运行一个lua脚本很简单，下载一个lua编译器后，编译安装到操作系统，然后通过lua命令就可以运行lua脚本了。

1、lua官网http://www.lua.org/



2、点击download后，跳转到下载页面



3、下载lua


curl -R -O http://www.lua.org/ftp/lua-5.4.3.tar.gz


4、解压


tar -zxvf lua-5.4.3.tar.gz

5、安装


make



6、运行

直接输入lua，即可进入到交互..]]></description><category></category></item><item><title><![CDATA[lua模块与面向对象]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/117222337</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/117222337</guid><author>king_kgh</author><pubDate>Mon, 24 May 2021 14:29:43 +0800</pubDate><description><![CDATA[模块的定义与使用

lua模块相关的内容在《openresty lua 模块》中已经写过了，定义模块也比较简单，这里再简单的过一下流程。

1、编写模块 module.lua

（1）定义一个.lua的文件，比如module.lua

（2）在文件中定义一个字典对象

（3）给字典对象赋予属性和方法

（4）返回这个字典对象


local m = {};

-- 模块变量
m.version=1.0;
m.author="king";

-- 模块方法
m.log = function (str) 
	p]]></description><category></category></item><item><title><![CDATA[Lua基础语法-变量-数组-函数-if-for-while]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/117219181</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/117219181</guid><author>king_kgh</author><pubDate>Mon, 24 May 2021 12:00:55 +0800</pubDate><description><![CDATA[lua支持在多种平台下进行安装，具体安装参考《Windows下编写Lua程序》

安装成功之后，可以了解下Lua 的基本语法，对于有过一门编程语言经验的朋友来讲，学习lua的基本语法也是非常简单的。

1、定义变量

lua在定义变量上非常类似于js，不需要声明变量类型，直接使用关键字 local 来定义变量，如

（1）基础变量


local a = 10; -- number
local b = "hello"; -- 字符串
local c = 10.5; -- number
local d = t]]></description><category></category></item><item><title><![CDATA[Windows下编写Lua程序]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/117217686</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/117217686</guid><author>king_kgh</author><pubDate>Mon, 24 May 2021 10:24:15 +0800</pubDate><description><![CDATA[Lua是一个非常小巧的嵌入式编程语言，经常会被嵌入到Redis、Nginx等系统中，对原有系统做一些功能的灵活扩展。一般来讲，Lua脚本极大程度都会运行在Linux下，也因此官方只提供了Linux下的安装包。但是在学习、开发和测试阶段，我们使用的都是Windows环境，那么在Windows下能够直接编译就方便多了，官方虽然没有提供，但是社区是有的，下面来看看具体的如何进行操作吧。

1、在lua的官网点击download，调整到下载页，如下图



2、点击上图中红色框中的，get binary 获取二进制]]></description><category></category></item><item><title><![CDATA[openresty 连接redis]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/117022438</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/117022438</guid><author>king_kgh</author><pubDate>Wed, 19 May 2021 12:43:40 +0800</pubDate><description><![CDATA[Redis是非常优秀的基于键值对的内存数据库，在项目中使用非常广泛。在高并发的项目中，经常会需要进行缓存的预热，或者部分数据在接入层就可以进行渲染，那么nginx和redis就成了绝配。在openresty之前，想要在nginx中连接redis那是非常难的一件事情，而有了openresty之后，一切就变得非常简单了。

1、安装redis

如果是要安装最新版本的redis，需要依赖gcc


wget http://download.redis.io/releases/redis-6.0.6.tar.g.]]></description><category></category></item><item><title><![CDATA[openresty lua 模块]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/107600626</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/107600626</guid><author>king_kgh</author><pubDate>Sun, 26 Jul 2020 22:02:40 +0800</pubDate><description><![CDATA[一个业务逻辑可能会非常复杂，不可能将所有的逻辑写到一个文件中，这就需要模块的概念。将公共方法抽取成为一个模块，在使用时可以调用这个模块的方法。lua中的模块有点类似于Java中类的抽象层级，但和类又有本质差别。





定义一个模块 创建一个lua文件 test_module.lua，内容如下



local count = 0 

local function hello() 

 count = count + 1 

 ngx.say("count : ", count)...]]></description><category></category></item><item><title><![CDATA[openresty 常用api]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/107600589</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/107600589</guid><author>king_kgh</author><pubDate>Sun, 26 Jul 2020 22:01:35 +0800</pubDate><description><![CDATA[获取参数



# 1 获取get方式传入的url参数

location /lua_api_params {

 default_type 'text/html';

 content_by_lua_block {

 local arg = ngx.req.get_uri_args();

 for k,v in pairs(arg) do

 ngx.say("key:",k," val:",v);

 end;...]]></description><category></category></item><item><title><![CDATA[openresty 第一个程序]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/107600571</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/107600571</guid><author>king_kgh</author><pubDate>Sun, 26 Jul 2020 22:00:22 +0800</pubDate><description><![CDATA[修改nginx配置文件，默认路径在：

/usr/local/openresty/nginx/conf/nginx.conf



修改后的文件如右图所示





content_by_lua 指定一句lua代码

content_by_lua_file 指定lua对应的文件

content_by_lua_block 指定lua代码块

校验修改后的nginx配置文件是否正确

nginx -t



重启nginx

ngin...]]></description><category></category></item><item><title><![CDATA[openresty 环境搭建]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/107600546</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/107600546</guid><author>king_kgh</author><pubDate>Sun, 26 Jul 2020 21:59:19 +0800</pubDate><description><![CDATA[1.安装依赖的包

yum install pcre-devel openssl-devel gcc curl



2.下载并安装openresty

# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/

# update the yum index:
sudo yum check-update



#安装openre..]]></description><category></category></item><item><title><![CDATA[Vert.x（vertx）操作Redis]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/101351064</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/101351064</guid><author>king_kgh</author><pubDate>Wed, 25 Sep 2019 10:58:00 +0800</pubDate><description><![CDATA[Redis是一个基于Key-Value的非关系型数据库，在项目中经常用来做缓存、分布式锁等。关于Redis的基础知识，这里就不多说了，读者如果对这块内容不熟悉，可以先找些Redis相关的资料来学习。下面我主要来介绍下在Vertx中如何使用Redis，以及底层的实现原理。

基本操作

1.使用Redis和使用数据库一样，只需要导入相关的包，就可以了。这里只需要引入vertx-redis-clien...]]></description><category></category></item><item><title><![CDATA[Vert.x（vertx）发送 HTTP/HTTPS请求]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/87863667</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/87863667</guid><author>king_kgh</author><pubDate>Thu, 21 Feb 2019 17:57:49 +0800</pubDate><description><![CDATA[应用场景

在应用系统中，经常会有类似于获取天气、发送短信、处理图像、支付等需求，这些需求实现都非常复杂，或者受到监管的限制，不是任何一个公司都可以做到的。但有些应用为了提升用户的体验，需要用到这些功能，比如饿了么会根据你所在的位置推荐附近的商家，在线商城需要在线支付，还有一些应用需要进行人脸识别等等。



有需求就会有市场，于是就有很多的公司单独对外提供某种服务，比如支付宝就对外提供支付的功能...]]></description><category></category></item><item><title><![CDATA[Vert.x(vertx) 事件总线（EventBus）与 远程服务调用]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/86993812</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/86993812</guid><author>king_kgh</author><pubDate>Mon, 11 Feb 2019 14:16:59 +0800</pubDate><description><![CDATA[Event Bus（事件总线） 是Vert.x的神经系统，负责应用系统消息的传递。Vert.x各模块（Verticle）之间的相互调用就是通过Event Bus实现的，因此各Verticle之间是高度解耦的。

Event Bus提供发布订阅功能和点对点的消息服务，类似于消息队列，每条消息在Event Bus上都有一个地址（address），发布者向这个地址发送消息，接收者从这个地址接收消息。

...]]></description><category></category></item><item><title><![CDATA[Vert.x(vertx) 认证和授权详解（包含认证和授权在Web系统中的使用）]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/85218454</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/85218454</guid><author>king_kgh</author><pubDate>Sat, 22 Dec 2018 22:22:39 +0800</pubDate><description><![CDATA[每个线上系统几乎都是离不开认证和授权的，Vert.x提供了灵活、简单、便捷的认证和授权的支持。Vert.x抽象出了两个核心的认证和授权的接口，一个是AuthProvider，另一个是User。通过这两个接口，我们可以非常灵活的实现我们自定义的认证和授权方法。当然，Vert.x也给我们提供了使用JDBC、Shiro、MongoDB、JWT等授权的实现，我们可以直接使用。

Vert.x提供的认证和...]]></description><category></category></item><item><title><![CDATA[Vert.x(vertx) 连接MySQL、Oracle数据库]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/84894599</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/84894599</guid><author>king_kgh</author><pubDate>Thu, 13 Dec 2018 15:59:24 +0800</pubDate><description><![CDATA[Vert.x提供异步访问数据库的API，可能这里有朋友会有疑惑，直接使用我们之前的熟悉的Mybatis或者Hibernate不行吗，可行，但数据库操作是一个耗时操作，使用传统的同步模型，容易阻塞线程，导致整体性能下降，因此我们对于数据库操作，需要使用Vert.x提供的异步API。

Vert.x提供的API层级非常低，可以说是仅仅在原生JDBC基础上封装了一层异步接口。所有的对数据库操作都需要通过...]]></description><category></category></item><item><title><![CDATA[Vert.x(vertx) 实现TCP服务]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/84870775</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/84870775</guid><author>king_kgh</author><pubDate>Fri, 07 Dec 2018 14:43:04 +0800</pubDate><description><![CDATA[对于Java开发人员，想要实现一个http服务，非常简单，写个servlet，打成war包，放到tomcat下就能运行。但如果要实现一个tcp服务就没那么简单了，因为tcp是传输层协议，并不像http那样，有类似tomcat的中间件给我们封装底层的网络协议，封装线程的交互。要实现一个tcp服务，只能自己动手处理网络和线程问题，这是非常考验编程功底的事情，而且如果团队人员素质不高，项目周期要求较短的...]]></description><category></category></item><item><title><![CDATA[Vert.x(vertx) Web开发-路由]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/80848571</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/80848571</guid><author>king_kgh</author><pubDate>Tue, 03 Jul 2018 16:21:46 +0800</pubDate><description><![CDATA[在Vert.x 创建HTTP服务 中我们已经创建了一个简单的HttpServer，但这个HttpServer比较低级，对于请求参数解析、Session等常用功能都需要我们通过编码实现，也就是要重复造轮子，非常不方便。

Vert.x提供了Web开发组件vertx-web，提供了一堆Web开发中常用的功能。比如参数封装，路由，国际化，认证和授权，session和cookie以及模板等，可以非常方便的...]]></description><category></category></item><item><title><![CDATA[Vert.x(vertx) 创建HTTP服务]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/80804078</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/80804078</guid><author>king_kgh</author><pubDate>Mon, 25 Jun 2018 18:09:11 +0800</pubDate><description><![CDATA[Vert.x底层通信框架依赖于Netty，并封装了对Http协议的支持，因此可以非常方便的进行Web开发，且不依赖于任何中间件。笔者所在的公司老系统使用的是SSM架构的项目，部署在Weblogic上，每年花在中间件上的钱就非常多，现在全面改造为Vert.x，中间件的费用直接就省了。另外不依赖中间件，编程会变得非常灵活，定制性非常强，安全性也会得到一定层度的提高。

对于实现一个简单的web服务，有...]]></description><category></category></item><item><title><![CDATA[Vert.x(vertx) 简明介绍]]></title><link>https://blog.youkuaiyun.com/king_kgh/article/details/80772657</link><guid>https://blog.youkuaiyun.com/king_kgh/article/details/80772657</guid><author>king_kgh</author><pubDate>Fri, 22 Jun 2018 15:43:28 +0800</pubDate><description><![CDATA[摘要

Vert.x最大的特点就在于异步（底层基于Netty），通过事件循环（EventLoop）来调起存储在异步任务队列（CallBackQueue）中的任务，大大降低了传统阻塞模型中线程对于操作系统的开销。因此相比较传统的阻塞模型，异步模型能够很大层度的提高系统的并发量。

Vert.x除了异步之外，还提供了非常多的吸引人的技术，比如EventBus，通过EventBus可以非常简单的实现分布...]]></description><category></category></item></channel></rss>