bug报告
在2017年,我使用C# 和 HP-SOCKET完成了一个OpenServer2.0服务器, 用来处理汽车厂里的ERP-SAP系统物料收货业务:
供应商按采购订单,把汽车零件送到工厂的零件仓库,库管员对送来的零件收货,确认数量后,用PDA扫描零件包装箱上的条码,PDA会把零件的编码和数量一起传到OpenServer服务器上,服务器再把数据传到SAP系统服务器,SAP系统对相应的采购订单完成收货。
PDA的WINCE客户端,OpenServer服务器,SAP系统RFC接口ZFM026,三端一整套程序功能,都由我开发完成,我比较了解该套程序的技术细节。
目前这套直连SAP程序功能,厂里一直在使用,每天有大量的物料信息在总装RDC仓库,从PDA传到SAP里被处理,这是一个采用HP-SOCKET网络引擎服务器的小案例。
2018年节前几天,我接到bug报告,并且一直有码友对之前的基于HP-SOCKET的聊天服务器咨询,让我联想到了基于HP-SOCKET的网络服务器设计,我能不能模块化的设计一个通用的网络服务器,来处理基于SOCKET的业务应用呢?
关于HP-SOCKET
HP-SOCKET是可以用C#去快速开发网络服务器的一个很好的底层SOCKET引擎。它同HP公司毛关系没有,是中国人编写的,帮助说明和DEMO极其详细。网络SOCKET服务器所涉及的技术复杂,要做好,难。全都自己来做,一般需要一个团队来搞,并且需要对系统底层和SOCKET了如指掌的技术大牛才控制好。
云风这么牛,之前也只是做的图像客户端,可见这一块水是极深的。
现在有了HP socket,我们可以踩在巨人的肩膀上,让自己的服务器可以快速成型,这里给HP-SOCKET点个赞。
网关服务
![](/qrcode.jpg)
客户端不断连接服务器,这里应该有一个服务负责接入客户端的连接,这个服务应该是可以有多个构成集群,他们只负责和客户端保持SOCKET连接。多个网关可以用来负载均衡,也可以在DOS攻击时不会一触即溃,我下载剑侠世界的私服架设时好像就有这么一个网关服务器。
中心服务
网关服务器通过SOCKET连接到一个中心服务器,中心服务器里有用户信息,在线用户的影子对象集合等等。
业务服务
业务处理往往会涉及到其它的系统,比如我之前单独开一个线程去处理调用SAP RFC采购订单业务,又开一个线程去处理SAP 另一个RFCASN收货业务,这样做还不过瘾,应该单独分离出多个业务服务去处理业务应用数据。一个中心服务器通过SOCKET连接到多个业务服务器。
关于SOCKET的数据
目前我的SOCKET数据都是字符串,用特定符号作为分割符,其中再指定一层分割,可以表示复杂的表数据,
http://blog.csdn.net/ot512csdn/article/details/72594306
这种方式对客户端的要求最低,可以适应多种客户端。
关于心跳
HP-SOCKET服务器组件有底层的断线检测机制,但考虑到WINCE或android的客户端都没有使用HP-SOCKET的客户端
OpenServer2.0时我加入了时间戳的心跳机制来检测断线,特别是在客户端这块。
TO BE CONTINUE……