开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5485|回复: 20
收起左侧

[易语言软件开源] bl-mid-proxy中间件,快速开发模块,支持各编程语言

[复制链接]
结帖率:89% (8/9)
发表于 2021-3-1 10:49:33 | 显示全部楼层 |阅读模式   山西省太原市
分享源码
界面截图: -
是否带模块: 调用了模块
备注说明: -
本帖最后由 Mruos 于 2021-3-1 10:55 编辑

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

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

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

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

http://images.burnlord.com/s/app/blmidproxy/20210226162231.png

main

main

目录:

  • 目的

  • 优势

  • 权限

  • 帮助

  • SDK

目的:

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

  1. mysql数据库的增删改查,基本是后端编程的核心代码,占据很大的代码工作量,无论什么使用什么编程语言,都大概需要了解这些:

    • 所用语言需要使用什么的mysql支持库、包、模块,要安装引用它;

    • 掌握所用mysql模块的类、函数等方法,需要自己去掌握什么是连接句柄、游标、记录集等;

    • 如果所用语言框架还有sql的集成函数语法,如php的tp框架等,依然需要学习(当然熟练后使用这些更方便);

    • 如果sql调用多,开发者还需要使用连接池或者自行把mysql模块的类、方法等封装成可靠的mysql连接池来提高sql的执行速度;

  2. redis缓存数据库同样的道理,依然需要掌握和mysql类似的那些知识点;

  3. 定时器,程序总免不了存在定时执行、周期执行的任务,这需要我们:

    • 掌握所学语言的多线程技术,因为周期、定时任务我们一般都在独立线程中等待触发或循环执行;

    • 对于一些语言(尤其解释型语言)来说,不当的方式可能代码逻辑上难处理,系统资源占用还高;

  4. 日志,各语言都有很多成熟的日志模块,且自行设计日志系统也并不复杂,但设计具有可交互界面的尤其带色彩的日志界面就不容易了,对于主流语言,如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)
    

    py-logging.png

    输入命令提交:

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

    注意:命令不要以sysmysqlredisloggingcrontab起始。

    # 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 ''
    

    py-logging-input.png

优势:

  1. 应用服务端代码不需要再引入和编写比如数据库连接管理类代码,降低工作量。易于初学者上手,比如对于通常使用的数据库增删改查,你只需要知道sql语句怎么写即可;

  2. 分离连接池、日志、任务线程等到独立的exe,利于主程序的稳定性;

  3. 便于对接,任何编程语言皆可,只要实现了http请求到本中间件,即可得到结果;

  4. 小巧,相较其他解释型编程语言实现本系列功能,本独立中间件效率更高、系统资源占用小,受环境依赖基本无(windows系统运行即可,无需任何依赖);

权限验证:

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

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

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

使用帮助:

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

    2.png

    • 双击命令输入区,即可打开快捷输入辅助;
      input-help.jpg
  • crontab任务管理与热加载;
    crontab.jpg

    • 系统帮助
      help.png

推荐:

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

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

SDK:

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

  1. e语言
    e-sdk.png

  2. python

python-sdk.png

  1. php
    php-sdk.png

  2. java
    java-sdk.png

感谢:

  • 服务端组件: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、小程序、网站……,可联系~

点评

下载地址:请去github、gitee下载   山西省太原市  发表于 2021-3-2 09:21

评分

参与人数 2好评 +2 精币 +4 收起 理由
按键精灵 + 1 + 2 新技能已get√
zhifu3158 + 1 + 2 新技能已get√

查看全部评分


本帖被以下淘专辑推荐:

结帖率:100% (3/3)

签到天数: 6 天

发表于 2022-12-15 05:16:22 | 显示全部楼层   山东省潍坊市
这个这么强,咋没人察觉。
回复 支持 反对

使用道具 举报

签到天数: 22 天

发表于 2022-6-8 10:36:30 | 显示全部楼层   广东省东莞市
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:81% (34/42)
发表于 2021-11-23 17:43:03 | 显示全部楼层   广东省湛江市
在使用sql语句insert增加记录后用SELECT LAST_INSERT_ID()获取刚刚增加记录的主键ID经常为实际ID值的小1位数,如果中间件或者mysql重启后第一次获取还是0,是什么问题呢
回复 支持 反对

使用道具 举报

结帖率:86% (19/22)
发表于 2021-6-20 09:35:23 | 显示全部楼层   四川省成都市
下载地址:请去github、gitee下载  
回复 支持 反对

使用道具 举报

结帖率:82% (9/11)

签到天数: 8 天

发表于 2021-6-12 10:58:04 | 显示全部楼层   辽宁省丹东市
本帖最后由 地主大大 于 2021-6-12 15:23 编辑

服务器是 2012 VM虚拟机      PHP SDK 功能返回正常:

{"errcode":200,"errmsg":"success","data":[{"id":1,"a1":"支fu测试","a2":"2018-04-28+11:49:04"}]}-*--------------------------

E出错
E 加载模块  :



mysql.init (“http://192.168.0.110/api/mysql”)
mysql.sql (“select a1 from cc”, res, errcode, errmsg)
调试输出 (errcode, errmsg, res)


返回 :

* 0 | “” | “<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->




不知道为什么.. 求解释


回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 22 天

发表于 2021-3-12 21:58:18 | 显示全部楼层   广东省深圳市
本来学易语言就是为了看得懂,你这个我又看不懂了。

点评

哈哈 同感   广西壮族自治区桂林市  发表于 2021-11-24 14:27
同感   福建省泉州市  发表于 2021-4-18 23:55
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2021-3-8 12:42:03 | 显示全部楼层   广西壮族自治区南宁市
666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2021-3-8 12:35:01 | 显示全部楼层   湖北省黄冈市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 20 天

发表于 2021-3-6 09:53:54 | 显示全部楼层   上海市上海市
新技能已get√
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表