热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个.net客户端通讯框架的设计(一)前言

背景最近我们的团队正在开发一款面向移动平台的LBS应用,客户端有android、j2me版本,LBS的概念非常不错我们希望将其发挥带极致。本人在这个项目

背景

最近我们的团队正在开发一款面向移动平台的LBS应用,客户端有android、j2me版本,LBS的概念非常不错我们希望将其发挥带极致。本人在这个项目中主导服务器开发(java平台)。由于人手有限以及团队中各自专长不同,服务器的数据统计与将来的PC端也又我一人用.NET承包了:P好了,废话不多说我们直入正题。

      其实有人会认为,不就是客户端与服务器的通信嘛,很简单,如果用阻塞I/O的话开两根线程,一根从网络I/O中读取数据,将每条消息投递到一个消息队列中,然后通过一些触发机制触发这些消息的处理代码;要写的话将要写的代码投递到一个输出队列中,另一根线程从这个队列poll消息然后write到流中即可……是的,这么做可以,而且我们android端的通讯就是这么做的。不过我还有一个目的,就是借此写一个轻量级的.NET服务器(之前是用java nio做的服务器),做过服务器的人都清楚,服务器是不可能用阻塞I/O+多线程的。而且我需要的是一个一个可服用、可定制的灵活的服务器/客户端通讯框架,于是就有了这个通信框架。如果您研究过apache mina,会发现在api的设计上与mina有相似之处哦。

项目中的运用

     软件的设计与架构是一门技术也是艺术,将整个合理的分层、熔炼,我们可以方便的在后期独立更换协议、业务、UI、配置。

image image image image image

其中:ClientConnLib是基础的通信框架;ConnProtocolLib结合特定协议的ClientConnLib的一个实现;BizModule则是基于通信框架接口的业务模块;BackEarth则是一个WPF应用程序,整个项目采用MVVM结构,BackEarth相当于MVVM中的View和Model。本系列文章只讲其中的客户端通信基础和急于这个框架的协议库实现。

原理概述

如下图:来自网络的数据会被Decoder处理,IDecoder接口有两个方法:Decodable和Decode,Decodable负责判断消息的完整性,如果接收到了一条完整的消息则在Decode中进行处理(传递到MessageHandler的MessageReceived)

image

 

 

 

ClientConnLib本身并不规定具体的协议格式,如果要定制的话只需自行实现IDecoder、IEncoder和IoHandler即可。

定制协议库

基于ClientConnLib我写了个ConnProtocolLib用于与我的java服务器进行通讯,我的那个服务器通讯协议时这样的

image wps_clip_image-1049

消息头是6个byte,前4个byte是消息的总长度,用于IDecoder进行完整性验证,后2个byte是消息的id,其余的是消息体数据。完整的消息读出后会被放入一个NetworkMessageBase的对象中传递给MessageHandler.MessageReceived处理,当然这个传递时借助一个线程池完成的,这样I/O线程解析完消息后会呗即时释放,业务的处理交由其他线程来完成。

这里我除了有一个NetworkMessageBase还有一个类似的JpNetworkMessageBase,后者是针对大字节序平台写的比如java platform,如果通讯目标使用大字节序则使用JpNetworkMessageBase即可。

余下几篇篇我将讲解这个通讯框架和协议库德实现。

下载链接:

http://files.cnblogs.com/wJiang/ClientConnLib.rar

转:https://www.cnblogs.com/wJiang/archive/2010/12/09/1900992.html



推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
author-avatar
普罗土
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有