摘要:物联网海量设备心跳注册,脱网清除——多线程高并发互斥锁落地 [toc] 1.应用背景 在物联网应用场景中,需要维护很多个设备的连接,比如基于TCP socket通信的长连接,目的是为了获取设备采集的信息,反向控制设备的数字开关或者模拟量。我们把这些TCP长连接都放入了基于线程安全的Concurren 阅读全文
posted @ 2020-04-15 22:29 JerryMouseLi 阅读(890) 评论(6) 推荐(2) 编辑
摘要:[toc] 1.粘包现象 每个TCP 长连接都有自己的socket缓存buffer,默认大小是8K,可支持手动设置。粘包是TCP长连接中最常见的现象,如下图 socket缓存中有5帧(或者说5包)心跳数据,包头即F0 AA 55 0F(十六进制),通过数包头数据我们确认出来缓存里有5帧心跳包,但是5 阅读全文
posted @ 2020-04-08 14:48 JerryMouseLi 阅读(611) 评论(2) 推荐(7) 编辑
摘要:[toc] 1.应用背景 底端设备有大量网络报文(字节数组):心跳报文,数据采集报文,告警报文上报。需要有对应的报文结构去解析这些字节流数据。 2.结构体解析 由此,我第一点就想到了用结构体去解析。原因有以下两点: 2.1.结构体存在栈中 类属于引用类型,存在堆中;结构体属于值类型,存在栈中,在一个 阅读全文
posted @ 2020-03-31 17:55 JerryMouseLi 阅读(795) 评论(2) 推荐(2) 编辑
摘要:视频在线率统计——基于驱动总线设备的领域驱动设计方法落地 [toc] 1.应用背景 本司智能信息箱产品是管控摄像头电源,监控摄像头视频在线率的一个有效运维工具。因为统计视频在线率是业主十分关心的问题,所以如何有效地统计视频在线率是工程师需要努力解决的问题。 2.各视频在线率统计方法比较 |方案|是否 阅读全文
posted @ 2020-02-28 23:41 JerryMouseLi 阅读(350) 评论(0) 推荐(0) 编辑
摘要:在net Core3.1上基于winform实现依赖注入实例 [toc] 1.背景 net core3.1是微软LTS长期3年支持版本,正式发布于2019 12 03,并且在windows平台上支持了Winfrom跟WPF桌面应用。本文介绍了使用Winform时的第一步,将应用层以及ORM涉及到的D 阅读全文
posted @ 2019-12-22 18:51 JerryMouseLi 阅读(4217) 评论(19) 推荐(48) 编辑
摘要:物联网海量设备心跳注册,脱网清除——多线程高并发互斥锁落地 [toc] 1.应用背景 在物联网应用场景中,需要维护很多个设备的连接,比如基于TCP socket通信的长连接,目的是为了获取设备采集的信息,反向控制设备的数字开关或者模拟量。我们把这些TCP长连接都放入了基于线程安全的Concurren 阅读全文
posted @ 2020-04-15 22:29 JerryMouseLi 阅读(890) 评论(6) 推荐(2) 编辑
摘要:[toc] 1.粘包现象 每个TCP 长连接都有自己的socket缓存buffer,默认大小是8K,可支持手动设置。粘包是TCP长连接中最常见的现象,如下图 socket缓存中有5帧(或者说5包)心跳数据,包头即F0 AA 55 0F(十六进制),通过数包头数据我们确认出来缓存里有5帧心跳包,但是5 阅读全文
posted @ 2020-04-08 14:48 JerryMouseLi 阅读(611) 评论(2) 推荐(7) 编辑
摘要:[toc] 1.背景 接上篇文章 "深入浅出C 结构体——封装以太网心跳包的结构为例" ,使用结构体性能不佳,而且也说明了原因。本篇文章详细描述了以类来封装网络心跳包的优缺点,结果大大提升了解析性能。 2.用类来封装以太网心跳包的优缺点 2.1.优点 + 可以在类里直接new byte[],即直接实 阅读全文
posted @ 2020-04-01 08:56 JerryMouseLi 阅读(778) 评论(0) 推荐(1) 编辑
摘要:[toc] 1.应用背景 底端设备有大量网络报文(字节数组):心跳报文,数据采集报文,告警报文上报。需要有对应的报文结构去解析这些字节流数据。 2.结构体解析 由此,我第一点就想到了用结构体去解析。原因有以下两点: 2.1.结构体存在栈中 类属于引用类型,存在堆中;结构体属于值类型,存在栈中,在一个 阅读全文
posted @ 2020-03-31 17:55 JerryMouseLi 阅读(795) 评论(2) 推荐(2) 编辑
摘要:[toc] 1.背景介绍 主要应用场景在物联网中,底端设备注册报文的上报,需要对报文的有效载荷(data)进行CRC16的复验,验证与设备端的CRC校验是否相等,如果相等,报文有效,设备上报就会注册成功,不是第一次则会刷新心跳时间,避免通信中断告警。设备的报文结果以及设备的CRC16位置如下: 平台 阅读全文
posted @ 2020-03-29 15:32 JerryMouseLi 阅读(281) 评论(0) 推荐(2) 编辑
摘要:Git在公司内部的使用规范 [toc] 1.版本定义 版本号使用x.x.x.x进行定义. + 第一个x代表大版本只有在项目有重大变更时更新; + 第二个x保留; + 第三个x代表常规版本有新求会更新; + 第四个x代表紧急Bug修正; 一个常见的版本号类似于:0.0.10.11 2.系统开发环境 | 阅读全文
posted @ 2020-03-24 11:10 JerryMouseLi 阅读(186) 评论(0) 推荐(0) 编辑
摘要:[toc] Abp系列 一. "abp框架运行——前后端分离(基于VUE)" 二. "基于abp框架的数据库种子数据初始化" 基于abp框架的数据库种子数据初始化 1.背景 最近在用abp开发项目,需要将如下区域数据通过程序的初次运行种入数据库。 不知道大家是怎么去管理数据库跟后台程序的同步的, " 阅读全文
posted @ 2020-03-06 17:59 JerryMouseLi 阅读(653) 评论(0) 推荐(1) 编辑
摘要:VUE中登录密码显示与隐藏的最简设计——基于iview [toc] 1.背景 近期,在使用abp开发项目过程中,前端vue输入登录密码时默认隐藏,但是如果用户输错密码需要切换显示跟隐藏。故有此文。 2.实现最终效果 2.1 隐藏密码 2.2 显示密码 显示密码需要点击密码框左侧眼睛 3.实现思路 3 阅读全文
posted @ 2020-03-05 19:18 JerryMouseLi 阅读(429) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.介绍abp 全称:aspnetboilerplate。 官网:https://aspnetboilerplate.com/ 由美国人发起的开源项目。 web应用框架 2.abp如何工作 微服务框架,可以使用 net core版本,也可使用net framework两种框架 3.运行D 阅读全文
posted @ 2020-03-02 20:04 JerryMouseLi 阅读(766) 评论(9) 推荐(1) 编辑
摘要:视频在线率统计——基于驱动总线设备的领域驱动设计方法落地 [toc] 1.应用背景 本司智能信息箱产品是管控摄像头电源,监控摄像头视频在线率的一个有效运维工具。因为统计视频在线率是业主十分关心的问题,所以如何有效地统计视频在线率是工程师需要努力解决的问题。 2.各视频在线率统计方法比较 |方案|是否 阅读全文
posted @ 2020-02-28 23:41 JerryMouseLi 阅读(350) 评论(0) 推荐(0) 编辑
摘要:基于HTTPS的接口测试——nginx配置SSL [toc] 1. 背景 年前团队成员zjq在做智能设备箱运维系统的微信小程序,主要实现智能设备箱列表展示,单台监测展示,门禁开关控制等功能。做着做着,发现微信小程序的后台接口,都需要https的安全链接,IP地址+端口号无效。对,腾讯为了使得小程序的 阅读全文
posted @ 2020-02-12 21:53 JerryMouseLi 阅读(356) 评论(0) 推荐(0) 编辑
摘要:在net Core3.1上基于winform实现依赖注入实例 [toc] 1.背景 net core3.1是微软LTS长期3年支持版本,正式发布于2019 12 03,并且在windows平台上支持了Winfrom跟WPF桌面应用。本文介绍了使用Winform时的第一步,将应用层以及ORM涉及到的D 阅读全文
posted @ 2019-12-22 18:51 JerryMouseLi 阅读(4217) 评论(19) 推荐(48) 编辑
摘要:[toc] 1. CTRL+ Tab 自动生成无参构造函数 2. Prop+ Tab 自动生成属性 3. CTRL+. 实现接口 4. 断点相关 第一个F5运行 第二个F5下一个断点 F9动态加载断点 F10下一行 F11进FUNCHTION 5.快速搭建类的构造函数 ctor 再按两次tab键 6 阅读全文
posted @ 2019-12-13 19:49 JerryMouseLi 阅读(126) 评论(0) 推荐(0) 编辑
摘要:基于多线程任务队列执行时间测试——泛型单例模式落地 [toc] 1.需求 比如有100个任务,多线程异步执行,统计执行完所有任务所耗费的时间。如,开始线程是线程A,最后的线程是B,记录B的DataTime.Now A的DataTime.Now. 2.遇到的问题 因为这里涉及到多线程,异步,所以需要在 阅读全文
posted @ 2019-12-13 12:18 JerryMouseLi 阅读(154) 评论(0) 推荐(0) 编辑
摘要:一个基于Net Core3.0的WPF框架Hello World实例 [toc] 1.创建WPF解决方案 1.1 创建Net Core版本的WPF工程 1.2 指定项目名称,路径,解决方案名称 2. 依赖库和4个程序文件介绍 2.1 框架依赖库 依赖Microsoft.NETCore.App跟Mic 阅读全文
posted @ 2019-11-07 16:27 JerryMouseLi 阅读(1047) 评论(4) 推荐(3) 编辑
摘要:EFCore某张表中获取某几个字段 [toc] 1.背景 在前后端分离的应用场景中,某张统计表有20几个字段,但是前端可能只用到4个字段,这样就涉及到获取某个表中的部分字段值。本文介绍3种方法。 2.法一:linq 2.1 使用Select方法 2.2 使用ForEach方法 2.3 其他参考代码 阅读全文
posted @ 2019-10-22 15:49 JerryMouseLi 阅读(1027) 评论(12) 推荐(3) 编辑
摘要:基于Git的数据库sql文件的管理——完美解决团队sql操作协同问题 [toc] 1.产生背景 公司开发项目过程中,后台会分为很多种服务,比如web服务,采集服务,都需要去操作数据库,有的时候甚至前端也会去操作数据库,修改字段,增加字段,删除字段,修改初始化数据等。怎么在各方之间进行同步?本文介绍了 阅读全文
posted @ 2019-10-15 11:00 JerryMouseLi 阅读(694) 评论(0) 推荐(0) 编辑
摘要:前端基于VUE的v charts的曲线显示 [toc] 1. 应用背景 在做一个某路灯管理处的物联网项目时,需要统计8个电表的电能曲线(时间 电能),需求就是能生成日报(24个点,间隔1小时,实时),月报(30个点,间隔1天,取每天的凌晨1点数据),年报(每个月,1号凌晨1点数据开始间隔9天,每个月 阅读全文
posted @ 2019-09-30 18:39 JerryMouseLi 阅读(622) 评论(6) 推荐(4) 编辑
摘要:Net Core基于TopShelf程序运行于服务模式 [toc] 1 背景 Net Core的本质是窗口程序(windows下的表现形式是console窗口)。客户与本公司的产品部经理都反馈如果不小心关闭了窗口,整个程序被关闭,后果可能会很严重,故将软件通过TopShelf做成服务模式,通过cmd 阅读全文
posted @ 2019-09-17 21:32 JerryMouseLi 阅读(714) 评论(6) 推荐(1) 编辑
摘要:[toc] 记录一次Git解决CONFLICT冲突 1.CONFLICT产生的原因 在这个情况下,分支1的版本C跟分支2的版本B的上一个版本是不一样的,所以这里需要将版本C与版本B进行自动合并,并解决冲突,然后再讲合并之后的版本C提交的master。 2.Git正确的两种使用流程 这里我为了保证数据 阅读全文
posted @ 2019-08-17 18:01 JerryMouseLi 阅读(2343) 评论(2) 推荐(1) 编辑
摘要:javascript中用&&跟||来简化if{}else{}的写法 [toc] 1. if else的写法 表示如果传入数组为非空,则赋值传入的经纬度数据;如果表示如果传入数组为空,则赋值固定的经纬度数据。 2. javascript中 && ||的用法 a() && b();如果执行a()后返回t 阅读全文
posted @ 2019-07-16 14:42 JerryMouseLi 阅读(1056) 评论(2) 推荐(1) 编辑
摘要:在C 中用静态类来扩展类的方法 [toc] 1.待扩展类 从上面代码看出其通过接口IList定义为List类型。 2.用于扩展的静态类中的静态方法 this IList rows表示用this关键字来扩展泛型List的方法 3 静态扩展方法的调用 4 适用场景 很多时候作用效果跟lambda(拉姆达 阅读全文
posted @ 2019-07-02 17:18 JerryMouseLi 阅读(1228) 评论(0) 推荐(2) 编辑
摘要:chrome浏览器 开发者工具F12中某网站的sources下的源码如何批量保存 [toc] 1. 常用保存Sources源码的两种方法 1.1单个文件 可以直接右键另存为 具体如下: 1.2 单个页面 保存网页,就会把引用到的所有文件下载下来。 2. 问题 如果页面很多,文件也很多,静态资源也很多 阅读全文
posted @ 2019-07-01 14:15 JerryMouseLi 阅读(5603) 评论(0) 推荐(2) 编辑
摘要:MySql报错 [toc] 1. 重复键报错1062 duplicate entry '0' for key 'xxx' 1.1 报错场景 在建立索引的时候报此错误。 1.2 报错原因 索引或者主键有重复键 1.3 解决方法 删除重复的索引或者主键条目,即可。 1.4 具体举例 给MAC建立索引表的 阅读全文
posted @ 2019-06-23 14:39 JerryMouseLi 阅读(541) 评论(0) 推荐(0) 编辑
摘要:VO(视图模型) 与 DTO(数据传输对象)的区别 [toc] 1.VO与DTO概念 VO(View Object):VO是显示视图模型,视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。举例:展示层将DTO传送过来男性显示成帅哥(客户端1),或者显示成靓仔(客户端2);将 阅读全文
posted @ 2019-06-22 16:13 JerryMouseLi 阅读(2583) 评论(0) 推荐(2) 编辑
摘要:[toc] 基于Coravel定时任务之物联网设备数量统计 1 应用背景 在物联网系统中,需要计算底端所有设备的总数,显示在Dashboard中,进行一个总数的显示。包括离线,告警,停运等等数据都需要对应的总数的统计显示。 2 对比各家定时库 2.1 TaskScheduler TaskSchedu 阅读全文
posted @ 2019-06-19 20:40 JerryMouseLi 阅读(1176) 评论(6) 推荐(2) 编辑
摘要:C\ 程序调试错误集 [toc] 1.依赖注入错误System.InvalidOperationException: Unable to resolve service for type 'xxx' while attempting to activate 'xxx'. 1.1 出错现象 Syste 阅读全文
posted @ 2019-06-19 16:12 JerryMouseLi 阅读(1355) 评论(0) 推荐(0) 编辑
摘要:VUE程序调试的方法 [toc] 1.写本文的背景 因为程序的调试非常重要,程序猿可以利用好的调试方法去查找定位自己的问题所在之处。从而,达到纠正自己程序错误的地方,健壮自己的程序,让问题变得越来越少,程序变得越来越健康。故作此文,而且日后会将实用的调试程序方法不断进行迭代更新。 2.调试与测试 调 阅读全文
posted @ 2019-06-16 20:41 JerryMouseLi 阅读(5135) 评论(2) 推荐(3) 编辑
摘要:C 调试程序——断点+观察数据的方法 [toc] 1.写本文的背景 因为程序的调试非常重要,他可以让自己不断地利用Visual Studio的强大去查找定位自己的问题所在之处。从而,达到纠正自己程序错误的地方,健壮自己的程序,让问题变得越来越少,程序变得越来越健康。故作此文,而且日后会将实用的调试程 阅读全文
posted @ 2019-06-16 16:32 JerryMouseLi 阅读(3651) 评论(3) 推荐(6) 编辑
摘要:Git使用及代码仓库介绍 [toc] Git是一个很强大的代码版本管理工具,在Git的使用过程中,不断学习积累Git的命令行及其作用,在本篇文章中记录了笔者使用过程的积累,以后还会持续更新。代码仓库分为分为工作区 暂存区 本地仓库 远程仓库 四个区,主要工作流程为暂存,拉取,恢复暂存,合并(如果有冲 阅读全文
posted @ 2019-06-16 11:32 JerryMouseLi 阅读(355) 评论(0) 推荐(0) 编辑
摘要:[toc] 1.背景 在Windows操作系统下开发,需要用到很多Windows CLI命令来调试程序,查看网络状态等,这里给自己做个记录,持续更新。 2.netstat 罗列端口号占用情况 罗列所有系统所有端口号,查找占用6379端口号的进程,及其进程状态(Established, Linsten 阅读全文
posted @ 2019-06-15 16:24 JerryMouseLi 阅读(378) 评论(0) 推荐(0) 编辑
摘要:[toc] 基于Redis消息的订阅发布应用场景 1.应用背景 在物联网采集管控系统中,前后端隔离的情况下,前端通过表单(比如按钮,开关,表格等)输入数据到数据库(比如MySql,通过WEBAPI服务端输入),然后采集控制端到数据库里去扫表取数据,将数据下发给物联网络中的终端设备(比如风扇控制板), 阅读全文
posted @ 2019-06-12 21:29 JerryMouseLi 阅读(5845) 评论(32) 推荐(20) 编辑
摘要:[toc] VUE中全局变量的定义和使用 1.工作中遇到的两类问题 1.1 状态值(标志) A界面赋值的a变量,作为记录状态值(标志)需要被其他几个界面使用。其他几个界面亦可以改变a状态值。 1.2 传递字段 A界面有a字段,B界面没有a字段,但需要调用a字段。 2.解决方法 2.1 VUEX 使用 阅读全文
posted @ 2019-06-04 17:50 JerryMouseLi 阅读(2343) 评论(2) 推荐(0) 编辑
摘要:[toc] Pull Request 工作流——更高效的管理代码 1.问题 工作中遇到同事会提交错误代码进入master仓库,这样需要强制提交回滚到正确代码,比较麻烦。不科学。 2.解决方案 使用git的分支流工作流程,先创建分支branch,在此分支上完成功能之后,经过严格测试,再pull req 阅读全文
posted @ 2019-05-20 20:21 JerryMouseLi 阅读(245) 评论(2) 推荐(1) 编辑
摘要:1.为什么要用仓储?(仓储有什么用) 1.1 解耦 为了解耦领域层与数据映射层的关系。 1.2 管理增删查改 仓储模式最大的优点就是所有的数据访问首先是通过仓库的,对仓库的增删改都不会立即提交到数据库,而只有当调用了仓库包裹器,这些增删改的操作才会一次提交到数据库。 2.仓储怎么实现? 2.1通过接 阅读全文
posted @ 2019-04-29 16:24 JerryMouseLi 阅读(88) 评论(0) 推荐(0) 编辑
摘要:应用背景 SCADA采集系统需要将实时数据存入历史表。问题1:如何更简单的添加历史数据?2.海量历史数据,比如年数据,如何快速筛选 画曲线? 1. 利用mysql的事件,每小时存一次采集数据; 2. 每月备份历史表,并且将原表清空。每个月1号凌晨1点,将历史表备份,名称命名为his_aic_2019 阅读全文
posted @ 2019-04-28 11:59 JerryMouseLi 阅读(843) 评论(2) 推荐(0) 编辑