博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[短彩信]C#短彩信模块开发设计(4)——其他
阅读量:4446 次
发布时间:2019-06-07

本文共 2879 字,大约阅读时间需要 9 分钟。

准备从以下几个方面简单的谈谈短彩信模块的实现:

[短彩信]C#短彩信模块开发设计(1)——架构()

[短彩信]C#短彩信模块开发设计(2)——配置()
[短彩信]C#短彩信模块开发设计(3)——协议()
[短彩信]C#短彩信模块开发设计(4)——其他()

1)流控

    流控实现的方法很多种,大家去搜一个下,应该能找到很多的方式,下面简单说一下,我们的方式,下面是一个主要实现方法的概要:

public class MtConnection    {        private int _maxSendCount;        private readonly object _sendCountLock = new object();        private int _sendCount = 0;          private DateTime _sendTime = DateTime.Now;      //该条链路累计发送MT的时间间隔 500毫秒为一时间段        public MtConnection(int maxSendCount)        {            _maxSendCount = maxSendCount;        }        public int MaxSendCount        {            get            {                if (DateTime.Now.Millisecond >= 500)                {                    return _maxSendCount / 2;                }                return _maxSendCount - (_maxSendCount / 2);            }        }        public bool IsOverSendCount(int sendNum)        {            lock (_sendCountLock)            {                DateTime now = DateTime.Now;                if ((now - _sendTime).TotalMilliseconds >= 500)                {                    _sendTime = now;                    _sendCount = sendNum;                }                else                {                    if (this._sendCount + sendNum > this.MaxSendCount)                    {                        return true;                    }                    _sendCount += sendNum;                }                return false;            }        }    }
class Program    {        static void Main(string[] args)        {            var mtConnection = new MtConnection(10);            for (int i = 0; i <= 1000000; i++)            {                if (mtConnection.IsOverSendCount(1))                {                    Console.WriteLine("发送" + i + "超流控");                    Thread.Sleep(1000);                }                else                {                    Console.WriteLine(i);                }            }        }    }

怎么样很简单吧,当然了,在我们实际的处理之中,如果判断某次的发送超过了流控阀值,不是简单的sleep,而是利用

ThreadPool.RegisterWaitForSingleObject(
 WaitHandle waitObject,
      WaitOrTimerCallback callBack,
      Object state,
     int millisecondsTimeOutInterval,
     bool executeOnlyOnce

)

向线程池添加一个可以定时执行的方法;(在我们的实现中对于延迟消息实际上会发送至一个System.Collections.Queue;原则是只要超流控,就入延迟队列;至于如何处理延迟,大家各自根据口味实现,不过要注意:一定不能丢消息,不能说第一次延迟了,第二次就一定不延迟)

2)实时监控

     关于实时监控,我们借助Window性能计数器(Performance Counter),去实时统计发送速度、发送消息数量、滑动窗口消息数量、消息积压数、网关延迟等等信息;由于为了使用方便,我们对于性能计数器进行了一定的封装,这里就不贴具体的代码了。关于性能计数器的使用,大家可以去查一下相关的资料;总之,借助Window性能计数器(Performance Counter)进行实时监控,对于程序本省的资源损耗很低,大家可以认为可以忽略;大家可以在run中输入perfmon.exe打开性能监视器;

 

3)联调和工具

3.1)抓包工具: 

短信基于CMPP协议,在联调和排查问题的时候,往往需要先抓包,那可以使用:wireshark(wireshark支持以cmpp协议解码):

 

3.2)常用Dos命令:

telnet:在检查网络是否通畅时用此命令。

tracert:如果telnet不通,可以用此命令检查哪一步出问题了。

netstat:检查连接情况。

 

3.3)其他:

一般在本地开发过程之中需要简单写一个模拟构造消息的工具(下图的TestTool)和网关挡板(下图的DumyGateway),下图是彩信solution的结构,短信的类似;

 

转载于:https://www.cnblogs.com/CopyPaster/archive/2012/12/17/2821715.html

你可能感兴趣的文章
Retrofit 2.1 入门
查看>>
初步了解,vue的转发机制(proxyTable)
查看>>
css兼容性记录
查看>>
矩阵分析-线性系统-3 LU分解
查看>>
UIView的几个枚举定义
查看>>
【转】十个PHP高级应用技巧
查看>>
VC++ 模块与资源分离
查看>>
服务器添加ipa MIME 类型,防止ipa下载后变zip后缀
查看>>
HDOJ2008数值统计
查看>>
饿汉式和懒汉式(单例模式详解)
查看>>
每天一个linux命令(41):ps命令
查看>>
关于加号传递到后端会变为空格的c#例子
查看>>
一次删除多个XML节点(RemoveChild())
查看>>
【Ubuntu】在Ubuntu 12.04 LTS上安装JDK6
查看>>
ubuntu 安装chm查看器chmsee
查看>>
Spring4.2 集成ActiveMQ5.14
查看>>
Spring-boot加载resources下的文件
查看>>
tomcat 项目部署问题
查看>>
给应用创建快捷图标
查看>>
转 Android - 文件操作
查看>>