bl-mid-proxy,中间件

Mruos阅读(548)

bl-mid-proxy,中间件代理端

目前本中间件,主要实现mysql连接池redis连接池crontab任务定时器logging多色日志输出 四大功能。

本中间件实质为一个服务端,通过http请求进行通信,任何编程语言都可以对接

提供简单的SDK(e、python、php、java),其他语言可自行组装http请求进行通讯。

本中间件主要解决以下问题:

  1. mysql数据库的增删改查,基本是后端编程的核心代码,占据很大的代码工作量,无论什么使用什么编程语言,都大概需要了解这些:
      • 所用语言需要使用什么的mysql支持库、包、模块,要安装引用它;
      • 掌握所用mysql模块的类、函数等方法,需要自己去掌握什么是连接句柄、游标、记录集等;
      • 如果所用语言框架还有sql的集成函数语法,如php的tp框架等,依然需要学习(当然熟练后使用这些更方便);
      • 如果sql调用多,开发者还需要使用连接池或者自行把mysql模块的类、方法等封装成可靠的mysql连接池来提高sql的执行速度;
    1. redis缓存数据库同样的道理,依然需要掌握和mysql类似的那些知识点;
    2. 定时器,程序总免不了存在定时执行、周期执行的任务,这需要我们:
      • 掌握所学语言的多线程技术,因为周期、定时任务我们一般都在独立线程中等待触发或循环执行;
      • 对于一些语言(尤其解释型语言)来说,不当的方式可能代码逻辑上难处理,系统资源占用还高;
    3. 日志,各语言都有很多成熟的日志模块,且自行设计日志系统也并不复杂,但设计具有可交互界面的尤其带色彩的日志界面就不容易了,对于主流语言,如java、python、php等,他们都是作为后端使用,并不擅长做UI组件界面设计,界面是比较影响程序效率、稳定性的,尤其在多线程的后端程序中;

本中间件就是针对上述四大问题,进行的功能封装,独立exe运行,具体来说就是:

  • 中间件内部集成mysql数据库连接池,mysql数据库一切连接、增删改查等都由本中间件处理,开发者程序只需要把要执行的sql语句作为参数,发送一个post请求到本中间件即可执行并获得json数据结果,方便各语言直接转成适用本语言的对象使用。开发者程序中无需去管其他任何与数据库相关的代码,只需要知道日常使用的增删改查的sql语句即可;

    以python为例:

    执行sql(原生请求):

    import requests
    import json
    
    # 测试访问中间件执行sql
    def test_midmysql():
        data = {
            "sql": "select * from test_userinfo limit 0,2"
        }
    
        try:
            log = requests.post('http://192.168.1.2:9606/api/mysql', json=data).text
            
            # 结果为json的文本字符串
            print(log)
            #输出:{"errcode":200,"errmsg":"success","data":[{"id":1,"name":"小明","age":10},{"id":2,"name":"小李","age":14}]}
            
            # 转成python对象类型(字典、列表),以备使用
            tmp = json.loads(log)    
            print(tmp)
       
            #输出:{'errcode': 200, 'errmsg': 'success', 'data': [{'id': 1, 'name': '小明', 'age': 10}, {'id': 2, 'name': '小李', 'age': 14}]}
            
        except:
            print('error')
            

    执行sql(使用sdk):

    import MidProxySDK
    
    mysql=MidProxySDK.MidMysql('http://192.168.1.2:9606/api/mysql')
    
    # 测试调用中间件的SDK执行sql
    def test_midmysql():
    
        res=mysql.sql('select * from test_userinfo limit 0,2')
    
        print(res)
        
        # 输出:{"errcode":200,"errmsg":"success","data":[{"id":1,"name":"小明","age":10},{"id":2,"name":"小李","age":14}]}
    

    success:

    {
    	"errcode":200,
    	"errmsg":"success",
    	"data":[                 //  查询语句,将包含data数据结果,支持大部分数据类型,且自动转成json的数值、浮点数、逻辑型、文本型
            {
                "id":1,
                "name":"小明",
                "age":10
            },
            {
                "id":2,
                "name":"小李",
                "age":14
            }
        ]
    }

    fail:

    {
    	"errcode":401,             // sql语句执行错误,返回401
    	"errmsg":"1146:Table 'test_db.userinf' doesn't exist"    // 具体的错误原因
    }
    {
    	"errcode":501,             // 中间件因为繁忙未能受理
    	"errmsg":"server busy."
    }
  • redis连接池原理同mysql;
  • 本中间件提供类似Linux的crontab功能,通过创建crontab定时表达式任务,来回调任务功能。支持任务类型:发送http、运行指定程序、执行sql语句。

    如在python的flask框架中,当需要定时执行某个功能时:

    import MidProxySDK
    
    @app.route('/api/task/clear')      # 把需要执行的任务功能放到一个接口函数中,无需添加触发时间相关代码线程
    def clear_outtime_log():
        mysql=MidProxySDK.MidMysql('http://192.168.1.2:9606/api/mysql')
        mysql.sql("delete from testaa where time_creat>1421023000")
        

    在中间件创建一个任务:

    \mod\crontab\tasks\clear_outtime_log.ini

    [sys]
    ; 每日0时0分1秒执行
    time=1 0 0 * * * *
    
    [info]
    on=1
    type=http
    url=http://192.168.1.2:9606/api/task/clear
    method=get

    如此,当每日0时0分1秒时,中间件会触发任务,发送一个http请求到flask后端,flask后端执行定时任务,开发者不需要管如何利用线程去定时执行任务,只需要写任务的详细逻辑功能即可。

  • logging,提供多色日志输出,自动创建日志文件以及类似cmd的多色日志输出显示;

    本中间件提供8种默认配色日志输出,分别为:infoimportantwarningerrorinputoutputdebugsystem,配色配置可直接在配置文件修改,另提供custom自定义配色日志输出,您可以把想要的配色日志通过在SDK新建个方法,方法调用custom即可进行增删配色;

    python-sdk-demo:

    import MidProxySDK
    
    logging=MidProxySDK.MidLogging('http://192.168.1.2:9606/api/logging'debug=True)
    
    def test_midlogging():
        logging.info('info','this is info msg.')
        logging.important('important', 'this is important msg.')
        logging.warning('warning', 'this is warning msg.')
        logging.error('error', 'this is error msg.')
        logging.input('input', 'this is input msg.')
        logging.output('output', 'this is output msg.')
        logging.system('system', 'this is system msg.')
        logging.debug_('debug_', 'this is debug_ msg.')      # 仅当,MidLogging(debug=True),时才会实际发送
        logging.custom('custom', 'this is custom msg.',fontSize=16,fontColor=16745623)
        

    输入命令提交:

    中间件输入的命令将会通过post提交到设置的url地址。

    **注意:**命令不要以sys 、mysql 、redis logging crontab 起始。

    # python为例
    from flask import Flask, request
    import MidProxySDK
    import json
    
    app = Flask(__name__)
    
    @app.route('/api/logging/input', methods=['POST'])   # 创建一个路由接口,接受中间件的命令
    def test_logging_input():
    
        input = str(request.get_data(), 'utf-8')
        input=json.loads(input)['input']                 # 获取输入的命令
    
        logging = MidProxySDK.MidLogging('http://192.168.1.2:9606/api/logging')   # 输出到中间件的日志
        logging.info('flask', 'had do:' + input)
    
        return ''
    

优势:

  1. 应用服务端代码不需要再引入和编写比如数据库连接管理类代码,降低工作量。易于初学者上手,比如对于通常使用的数据库增删改查,你只需要知道sql语句怎么写即可;
  2. 分离连接池、日志、任务线程等到独立的exe,利于主程序的稳定性;
  3. 便于对接,任何编程语言皆可,只要实现了http请求到本中间件,即可得到结果;
  4. 小巧,相较其他解释型编程语言实现本系列功能,本独立中间件效率更高、系统资源占用小,受环境依赖基本无(windows系统运行即可,无需任何依赖);

权限验证:

中间件程序有一个IP白名单。

终端用户直接与本中间件进行http通讯,将会使比如mysql等面临风险(若要解除此限制,请自行修改主程序源代码)。

强烈建议,白名单仅限本机内网或指定IP进行连接。

使用帮助:

  • 日志区右键,可打开辅助功能菜单;

  • 双击命令输入区,即可打开快捷输入辅助;

  • crontab任务管理与热加载;

  • 系统帮助

 

推荐:

不知如何安装mysql、redis等,可通过phpstudy,一键安装启动。

phpstudy:https://www.xp.cn/

SDK:

提供e、python、php、java的SDK,内容较为简单,仅是封装了请求。其他语言自行参考help的请求方式发送post对接。

  1. e语言

  1. python

  1. php

  1. java

感谢:

  • 服务端组件:HPsocket 官网
  • redis:使用的是E2EE的redis同步客户端。 官网

关于:

本程序遵从BSD开源协议,谢谢使用与参与改进,丰富功能。有问题欢迎留言,期望大佬们有使用到的不断完善与分享~

Github:https://github.com/Mruos/bl-mid-proxy

Gitee:https://gitee.com/burnlord/bl-mid-proxy

by:Mruos

QQ/wechat:812465371

web:burnlord.com

软件、插件、APP、小程序、网站……,可联系~

服务端守护程序

Mruos阅读(979)

如下图,

主要为通过周期访问服务端的心跳地址来确认服务端程序是否在稳定运行,

如果连续3个周期未收到心跳数据返回则会重启服务端。

重启时会先尝试结束原程序(如果程序只是报严重错误还未退出的话),再启动程序。

程序请自行在启动后进行正常运行。

下载地址:

链接: https://pan.baidu.com/s/14Vv6gWbDFsWjtqtPmyd-Dw

提取码: yvbz 

UrlGo,静态页面更新助手

Mruos阅读(929)

一、UrlGo 是做什么的

UrlGo,是为了方便快速的对数据网页进行更新而开发的在线页面更新工具。

简单理解:

如果你用过PicGo,就知道它多方便了。PicGo,是图片云床工具,可以便捷的把你的图片上传到自己的云储存中(如:七牛云、又拍云……),获得外链供其他网站、程序使用。

使用云图片,可以减少网站空间占用,其次云储存中图片都进行了CDN加速,可以有效提高你的网站效率,减少网站服务器压力。

本程序类似图片云床,只是它是把数据页面上传/更新到自己的云储存中。

如:

  1. 更新文件清单(update.json
  2. 应用公告(app.json
  3. 更新日志(updatelog.html
  4. css/js文件(wechatset.css

以及其他用于存放数据的静态简单页面。

二、程序运行

本小网站程序主要操作的仅有2个页面,为静态的可放在云储存中以便CDN加速打开。

示例站点:

创建:http://sup.burnlord.com/app/urlgo/creat.html

设置:http://sup.burnlord.com/app/urlgo/set.html

1、创建页

如下图,管理员可以通过管理员密码(授权码)来创建一个页面,并且可以为这个页面设置一个独立的密码(便于交给他人独立更新页面)。

本页面仅限管理员操作,用于便捷生成一个页面地址。

2、设置页

如下图所示,填写创建的url地址,创建时的密码(管理员密码也可)即可更新页面内容。

三、优势

1、创建页面、设置页面、数据内容页面都在upyun云储存,访问时皆被CDN进行了加速,速度快

2、页面都在云储存,不占自己网站的虚拟主机/服务器上空间

3、处理程序服务端是exe,布局简单,拖到云服务器使用即可。且可以任意设置端口,可不占用网站的80端口,不影响云服务器上其他程序

4、更新数据页面便捷了,这是重点!!!

四、附图

1、更新程序上的更新记录

2、服务端效果

五、价格

成品+免费搭建: 49¥     

建设需求:

  1. 一个域名且已备案;
  2. 又拍云开储存空间;
  3. 云服务器运行处理程序(exe);

成品服务端绑定云服务器,一次绑定即可。搭建请准备好所需条件(已备案域名、云服务器);

至于担心又拍云云储存费用,又拍云有免费额度,而且如果不放图片、视频等资源,免费的额度足够足够你平常使用。

下载程序     开通授权     搭建教程     upyun

所有源码: 99¥

如果需要自己扩展、学习,可买源码。程序不大,就算没有web基础,研究一下也可以上手改进。

联系作者QQ:812465371

bl-api-cloud,高性能可扩展API服务器

Mruos阅读(1650)

bl-api-cloud,轻云服务端

为轻量级可扩展的API服务端框架,主要用于响应http请求,开发者可通过开发自己的功能插件(.dll)进行加载以达到扩展。

丨用途

为其他程序、应用,提供便捷的http接口搭建功能,开发者从而不再需要使用大型、复杂框架。
(毕竟很多时候为了一个小接口不值得用主流语言的比如java的Spring或python的Flask去搭建服务端)
举个最简单的例子,有时在授权、防破解等应用中,我们需要获取准确的北京时间。一般我们为了方便会通过第三方来获取:
1、找个提供北京时间的第三方web页面;
2、写个模块或DLL,提取页面里的北京时间;
弊端:如果第三方页面出现问题,或web页面源码有变动,那么获取就会失败,进而影响了所有使用了此模块/DLL的程序。
其实,很简单,我们让自己的服务器自动同步了时间(一般都默认开启着),然后提供一个http接口即可,用自己的最稳定。
网页_访问 (“http://192.168.1.1:6680/api/sup/bjtime/10”)
我自己使用本框架已应用的领域:
如取北京时间等实用接口;
搭建自己的网络验证系统(用户注册、登录、程序使用授权);
搭建微信公众号后台程序(没错,完全没问题);
web页面搭建,只要有能力,你可以搭建出任意页面;(当然搭建企业级或大型复杂些的建议使用主流语言的主流框架,毕竟使用这个费劲死了,需要自己建设的方面太多)

丨特色

1、通讯组件使用的为HPsocket,强大、稳定

HP-Socket,是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统。
其Server 组件:基于IOCP / EPOLL通信模型,并结合缓存池、私有堆等技术实现高效内存管理,支持超大规模、高并发通信场景。
应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。

2、双服务端支持(http、https)

 服务端启动端口自定义,默认http服务端80端口,https服务端443。当然本框架出发定性小众领域使用,可以设置其他端口,以免占用重要的web框架接口。

3、扩展便捷

扩展(插件)为DLL文件,只需放入根目录下的/plugins即可。DLL支持热加载与释放,无需终止服务端主程序即可进行DLL更新。
开发模板简单,一目了然,因为全部开源,开发者依然可以自主向插件传递更多可操作的主程序指针(通常模板自带功能足够使用了)。
每个插件都有自己的http访问请求处理域且可以是多个,插件之间不会互相冲突;
在两个示例demo中,对于/api/sup/bjtime根址的http请求,服务端只push到了bjtime.dll插件,对于/web的http请求,服务端只push到了web-demo.dll插件。
提供有2个扩展开发模板demo:
(1)bjtime
示例如何返回Get请求,功能性代码不足20行即可实现;
(2)web-demo
示例web页面返回,提供Get静态web目录文件回执和向服务端Post数据处理示例;
1、访问页面(http与https)

 

2、post数据

 

4、集成实用便捷功能

 自带集成多色日志输出、debug消息模式、访问频率保护等功能;
(1)多色日志输出
主程序的日志消息窗口,可以对应不同的日志显示不同的颜色,方便开发者一目了然的找到查看消息。如:
灰色(gray)的为debug消息;
红色(red)的为异常或错误信息;
绿色(green)的为收到的事件;
黄色(yellow)为重要系统消息;
当然可以自己设置其他颜色,以及如何输出。
注意: 多色输出使用的是超级编辑框组件,在高并发下是否对程序效率影响有待考证(组件可能拖累程序),请自行进行取舍、替换。
(2)日志记录
主程序集成一个简单日志记录模块,主程序运行每一次运行后都会在/log目录创建一个日志文件(名称以运行开始时间-运行结束时间.txt为名,方便开发者查找时段消息)。
开发者也可以在自己开发的插件中加入独立的日志记录。
(3)debug消息模式
主程序启动后通过输入sys debug onsys debug off可开关debug模式,在debug模式下,会输出显示更多的日志消息(修改主程序文件可以自己定义显示什么内容为debug类型的消息),以便于程序调试。
(4)访问频率保护
主程序自带了一个频率保护功能,可以自行设置频率。如对于同一IP的访问限制在最近n秒内不可以超过i次。此功能用的自己简单设计的一个Belt模型,小众使用足够,高度使用下,开发者可根据实际需求决定是否自己去设计类似功能。

5、心跳包异常监测

 为了应对服务端布局在云服务器上异常退出的情形,用户可以通过发送Get心跳包的请求来确认服务端运行状态,发生异常可重启它。本框架目录下有个示例demo。
用户可以自己设置心跳包地址,默认/api/this/heart

6、web服务端

 可以用于构建简单web页面,与web页面交互,理论上只要你精通web前端及后端处理逻辑,可以搭建(不过有这能力肯定不是用易语言搭建了)。
示例开发demo(plug-demo-web.e)提供了一个示例参考,可以搭建web页面,当然专业web设计等请移步使用主流语言的成熟框架。
参考上面图片。

7、命令行式操作

 最大化简化了服务端的UI界面(毕竟后端的东西),提供命令行式命令输入操作,除了系统前缀的命令,其他可推送到每个插件;
开发者可以在自己的插件里获取主程序输入的命令,然后进行相关处理。

8、开发难度低

 完整开源,包含主程序在内上手难度极低,代码注释齐全,结构明晰;也可以作为网络应用、DLL插件类型热加载释放等学习参考项目。

 

丨使用协议

本框架遵从BSD开源协议

可以任意使用本框架及代码进行二次开发,开发后产品可以闭源,开发源码主文件需要注释版权引用说明;

不可以使用本框架作者信息进行推广、营销;

 

丨下载

 

丨案例贴图

1、微信公众号后台程序

 

2、网络验证系统,用户登录

 

丨其他

by: Mruos

QQ/微信: 812465371

QQ群: 465021903

web: www.burnlord.com

 

使用问题、建议、Bug反馈,跟踪更新等欢迎加群交流~

本程序依然存在不足之处,欢迎各大佬批评、指出,一起完善。

 

丨支持一下,给个打赏~

 

bl文本处理器

Mruos阅读(1007)

个人平常常用的   文本处理工具,主要有一些基本的定位、查询、替换、简单的批量文本(一般批量代码)生成,还有其他的。

示例如下:

下载地址:

tools文件夹下面:  https://pan.baidu.com/s/1i5RyUaT

源码私聊联系我

QQ/微信:812465371

【开源】BLupdate2.0,通用更新程序

Mruos阅读(1638)

丨简介

BLupdate2.0,通用更新程序。

【版本】

相比1.0版,本版主要是利用的绝对web路径进行更新,所以,如果有使用FTP进行更新的,还是请参考1.0版1.0版介绍地址:http://blupdate.mydoc.io/。当然本版相比1.0版,做了很多的突破与改进。

【方式】

利用web页面储存版本json信息,使用MD5比对文件,通过http下载更新。

【特点】

1、更新器具有自更新能力;

2、更新器同时也是一个下载器,可以用于程序修复;

3、更新器具有更新前结束进程,更新后运行程序或者CMD命令;

4、更新器可以被其他程序进行调用,实现自动更新,更新完成后回调主程序;

5、支持绝对路径、相对路径、向上路径的文件更新;

【适用】

1、一切有更新需求的程序;

2、对如酷Q等机器人插件更新,做了特别演示。

丨界面

UI仅供参考,非主体内容,自己定义。

丨使用教程

(请全屏<双击进入全屏>,调到最高清晰度观看,建议wifi下看)

【告知】请先自行查看教程视频,教程中已经说明的问题再私人联系我,不给与解答。

在这里给简单列出一下更新配置文件(sup.json)的说明。

【sup.json】

更新程序会从web读取,更新的配置信息,配置信息为一个json文件json示例地址:http://www.burnlord.com/s/blupdate/sup.json。开发者需要自己去配置更新信息。json在线解析:http://qqe2.com/

json字段说明如下,其他问题,请参考教程视频。

本json字段中的文件清单,有专门的文件清单生成器,使用方法见视频。

其他相关问题,请参考教程视频以及源码中的注解。

丨下载地址

https://pan.baidu.com/s/1i5RyUaT

版权所有,违版必究。

—————————————————-

by:Mruos

QQ:812465371

赞助支付宝:13834695729

插件 工具 机器人

联系我们