自己动手打造企业级短信平台(下)

原创 2004年09月23日 16:02:00

看了上一篇文章,大家一定觉得我在吹牛,不就是一个发送短消息的小程序,也敢称企业级短信平台,呵呵,别着急,昨天的内容就好比万里长征的第一步,只有第一步走出去才会有以后的千千万万步,所以第一步要走好走扎实才行。

费话就不多说了,马上开始今天的内容。

昨天我们的目标很明确,就是做一个能发送短消息的小程序,而今天的需求就更复杂一些,我常说具体问题具体分析,但这次我不能再这样了,因为需求是多种多样的,为了不使本文沦为长篇大论而无法收尾,我尽量把问题简单化,所以我们这次的这个DEMO仅仅是构建一个发送短消息的平台。

既然是一个平台,就需要有服务提供者和服务使用者。两种之间的关系显然是一种调用和被调用的关系。既然是一个平台,那么我们当然希望它能在大多数环境下使用,比如说可以针对互联网上的用户提供发送服务,可以只针对局域网内用户提供发送服务,可以只针对本机用户提供发送服务(废话…@#$#^%)。既然是一个平台,我们当然希望这个服务能很容易的被其它的客户端引用,比如说windows应用程序或是web应用程序。

OK,面对以上三个对短信平台的基本要求,我们可以看到这将是一个分布式的项目。值得庆幸的是,.NET已经为我们进行分布式开发提供了充分的准备,我们只需要拿起手中的利器就能毫不费力的取得胜利。而这些利器就是Remoting和Web Service。和昨天一样,如果你对这些技术不是很了解,可以查阅网上的资料,但你并不需要很深入的学习(暂时不需要),因为他们都高深莫测,想一口吃个胖子是不可能的,我们可以通过一些实例来逐渐深入的学习和熟悉它们。


 (图1:发送短消息的简单用例)

通过上面的用例可以看出,服务调用者是通过“发送短消息”这样一个接口来实现发送的,说到服务接口,我们马上就会想到web service,对,就是这么一个东东,用它来做为服务接口再合适不过了。一下就被你猜中,是不是觉得太简单了?

先不要高兴的太早,服务端以web服务的形式出现是不切合实际的。这样做的后果是:在每次请求时都需要重新打开手机的串口,初始化服务,然后才能发送,首先这样会因为时间上的延误造成调用端超时、死锁,其次我们并不能保证每次连接都能成功,如果不成功就会造成信息丢失,这显然是不允许的。造成以上情况的直接原因是web service和所有web应用程序一样,不能保持对象状态,只能对请求作出回应。因此在建立web service的同时,我们还需要在服务端创建一个对象来保持短信服务的状态并监控连接和发送情况。这个对象一般情况下是一个windows应用程序,但在我的这个DEMO里它是一个windows服务,因为我希望它一开机就加载。

这样的话,我们的服务器端就运行了两个应用程序,一个提供web service接口,一个执行短信发送服务,两者共同合作完成发送短消息的动作。为了使它们能够互相交互,我们有两种选择,一种就是刚才用到web service技术,一种就是Remoting技术。关于Remoting的技术细节,大家可以查看这里。因为两个服务程序在同一台服务器,所以出于性能的考虑我选择了Remoting。

流程已经很清楚了,服务端:服务器开机->自动加载短信服务->初始化短信平台;客户端:调用者调用服务->服务接口接收信息->触发“发短信事件”->发送短消息。在搞清楚这些之后我们就可以动手搭建平台了,具体过程我就不细述了,大家可参考本文最下边的DEMO。需要说明的是,这个DEMO只是简单的实现了一些基本功能,并没有考虑安全性、并发性、稳定性和异常处理,因为这些技术细节不在本文讨论范围之内,我会在以后的blog中针对部分内容做更深入的探讨。

以下是这个平台各个模块的功能和要点:

RemoteServer:相当于业务逻辑层,所有短信操作都在这里边。ReadConfig.cs文件里存放手机的端口号和其它参数信息。
WindowsServer:看名字就知道是一个windows服务程序,它是RemoteServer的宿主,它里边的内容很简单,只是注册了一个信道。在第一次接收到调用端请求时,它会构造一个服务对象。并将一直保持其状态,直到服务被中断。
这个程序在使用时需要先注册。注册方法是:installutil WindowsServer.exe 卸载方法是:installutil /u WindowsServer.exe
WindowsTest:调用短信服务的一个windows应该程序,通过它可以打开或关闭串口、发送短消息等。
SmsWebService:服务接口,可以被windows应用程序和web应用程序引用。
WebTest:一个web应用程序,只有一个发送短消息的页子,在它里边引用了上面的web服务。


源码下载:

本文的DEMO(下载关闭)

实战开发企业级ERP进销存管理项目视频教程下载

《基于ibatis、spring、struts2.0技术实战开发企业级ERP进销存管理项目(权限、Ajax、Jquery)》 课程讲师:小福 课程分类:Java 适合人群:中级 课时数量:91...
  • u014162796
  • u014162796
  • 2014年04月01日 12:55
  • 1943

架构师之路:Java从零到企业级电商项目实战服务端

CK2135-Java从零到企业级电商项目实战服务端 随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大...
  • cadn_jueying
  • cadn_jueying
  • 2017年11月23日 20:53
  • 1411

手把手让你实现开源企业级web高并发解决方案

本来想起个比较风趣点的标题,可想来思去,还是走常规路线,做一系列的手把手吧。 这样一来,便于我的老朋友们识别,也让我对这篇文章的粒度把我有个定位。   本篇博文主要介绍利用开源的解决方案,来为企...
  • qq_26562641
  • qq_26562641
  • 2016年10月19日 10:30
  • 1178

自己动手,打造自己的事件总线

自己打造轻量的适合自己的事件总线框架
  • qq_33390836
  • qq_33390836
  • 2017年01月05日 18:57
  • 161

打造你自己的企业级 SOA 市场

SOA 具备能够帮你打破技术孤岛、简化技术栈、缩减成本并提高质量等巨大潜力。尽管如此,经常会有一些政治障碍影响 SOA 策略的实现:技术孤岛对彼此的行为几乎没有可见性部门之间相互竞争,几乎没有去进行服...
  • defonds
  • defonds
  • 2017年03月10日 11:37
  • 7879

深度学习动手实践:用 TensorFlow 打造“会看”的机器人

本文首发于微信公众号:新智元。文章内容属作者个人观点,不代表和讯网立场。投资者据此操作,风险请自担。 1 新智元编译1   来源:oreilly.com   ...
  • x32sky
  • x32sky
  • 2016年10月21日 10:41
  • 1629

程序员如何动手打造属于自己的智能家居

本文转自 奔跑的小乌龟 的博客 自己动手打造属于自己的智能家居(一) 最近智能家居比较火,各种电子产品也层出不穷,于是利用业余时间,学了学,将自己的房子简单改造了一下,也算体验一下智能家居...
  • abcso
  • abcso
  • 2014年10月02日 01:17
  • 1665

自己动手打造ajax图片上传

今天笔者需要一款图片上传插件,但是网上没有提供一款符合自己需求且好用的。于是就自己动手写了一个。 方法1,仅使用jquery代码,不用第三方插件。代码如下 上传图片 ...
  • lzjpc500
  • lzjpc500
  • 2014年06月30日 12:55
  • 2462

如何动手打造属于自己的AlphaGo Zero?

Petr Baudis是捷克布拉格技术大学的一名博士生,他也是创业公司Rossum.ai的创始人。近日,Petr在Medium上发表了一篇博客,结合自己在强化学习方面的研究以及在围棋方面的应用讲述了如...
  • qq_19598705
  • qq_19598705
  • 2017年11月28日 21:15
  • 325

程序员如何动手打造属于自己的智能…

自己动手打造属于自己的智能家居(一) 最近智能家居比较火,各种电子产品也层出不穷,于是利用业余时间,学了学,将自己的房子简单改造了一下,也算体验一下智能家居。在开始正文之前,有必要先声明一下:  ...
  • Black_House
  • Black_House
  • 2014年12月11日 15:37
  • 854
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己动手打造企业级短信平台(下)
举报原因:
原因补充:

(最多只允许输入30个字)