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

通信模型之“透明”

今天是大牛走后的第一周,大牛走了,理所当然所有的代码变成我维护修改了。由于最开始写的是写一步算一步,现在0.0.1版release后发现代

    今天是大牛走后的第一周,大牛走了,理所当然所有的代码变成我维护修改了。由于最开始写的是写一步算一步,现在0.0.1版release后发现代码结构有很多不合理,理所当然要重构。首先重构的当然是影响着整的前后台系统的socket通信。之前socket的设计是这样的:

     前后台系统共用一个socket.dll,使用socket.dll来封装socket的部分。但是今天看代码时发现其实bg(后台程序)与fg(前台程序)分别加载时socket时,socket.dll分别在两个进程中都有一分部没用的数据与代码拷贝,如后台只需要服务端的相关处理部分数据与代码,前台只需要客户端的处理部分与代码,放在一个DLL中逻辑上看起来很不优雅。而且在socket.dll的代码中定义了一套与外部接口相对应的内部通信数据结构,如socket.dll 导出一个s_aa(struct bb *p)样子的接口那么socket.dll中必有一个struct bb_private与之对应,在调用s_aa时其实p所指向的参数是会被转成struct bb_private后才会被发出去。个人感觉这样做,这个socket.dll仅仅是一个库,如果以后增加了一个功能,这个库可能就需要修改很大,不能实现高内聚低耦合的宗旨。

      个人认为优雅的实现应该是这样的:

    SocketClient.dll与SocketServer负责Socket通信的处理,但是这两个DLL并不知道所有Socket之上的东西,他们仅提供一种机制那就是“透明”,将前台(Client)与后台(Server)之间的网络透明掉,让程序的数据与处理在逻辑上如图中虚线那样执行,如FG调用BG的某个功能,Socketxx.DLL并不需要知道任何关于这个功能函数的数据结构,逻辑上看就像是前台直接调用了BG的函数然后得到了BG函数的返回值。这时Socketxx.DLL不需要知道任何调用的细节,这就是机制,如果要加一个FG调BG的功能函数,那么只需要修改FG与BG而不需要同时修改Socketxx.DLL这两个DLL,这才是透明机制。这样一看逻辑上就清晰多了,而且也优雅多了。

转:https://www.cnblogs.com/findstr/p/3500133.html



推荐阅读
  • iwanttowriteasimpleAppforme(Android).Forthisitisnecessarythattheservercansenddat ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • UML 包图
    什么是包包可直接理解为命名空间,文件夹,是用来组织图形的封装,包图可以用来表述功能组命名空间的组织层次。•在面向对象软件开发的视角中&#x ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文探讨了在设置了HTTP客户端超时时间后,向HTTP服务器发送请求时出现两个请求的情况。其中一个请求正常,另一个请求无法获取请求参数。文章分析了可能导致此问题的原因,并提供了解决方案。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文介绍了连接库的定义和使用方法。连接库是通过编译生成的dll文件,例如php_mysql.dll。在使用扩展时,需要去掉配置文件中的分号,并通过phpinfo查看是否正确加载了mysql连接库。详细内容请参考链接:https://www.cnblogs.com/xiaobiaomei/p/7654750.html。摘要字数:180字。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • python网络编程 day27 网络编程初识 ——socket
    一、内容回顾1、两个内置函数(装饰器)及类中的魔术方法 ... [详细]
  • 并不是上一个用SocketServer的聊天室的延续。用远程调用完成的聊天室。正好有Java的RMI聊天室的作业,就先用Python写了一个简单的类似远程调用的东西& ... [详细]
  • Docker 快速入门指引
    本文最早发表于本人博客:Docker快速入门指引Docker是什么?Docker是Docker.Inc公司开源的一个基于LXC技术之上构建的Container容器引擎,基于Go语言 ... [详细]
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社区 版权所有