客户端网络库实现真的很简单吗?
(注:本文所讲的网络协议只针对TCP协议)
背景:开发一个C/S的应用势必需要服务端和客户端的适配,包括网络协议、数据传输格式、业务处理的适配。由于服务端承载着大量的客户端,需要高并发、高性能、高可靠性,在我们的认知里往往认为服务端的网络模型和架构设计很复杂。但是客户端嘛,无非就是建立网络连接,发个请求收个回复如此简单。所以在工作中经常会出现有些客户端处理界面和业务的同事对平台开发者说,你做好服务端的网络就好,客户端的网络我来处理,而且在他们的想法里,这个所谓的客户端网络库只需要很短的时间就可以做完,每每遇到这种情况,我都会问几个问题劝他们放弃这种想法,由更擅长进行网络编程的平台端来提供网络库,为什么呢?
先看看我常问的几个问题。
问:你打算怎样实现客户端的网络层?
答:对于TCP协议来说无非就是connect,send,recv呗。
问:那你是否考虑到这种情况,你同时或者先后发过去两个网络请求,你怎么确定你收到回复是哪个请求的?
(其实问到这时有些同事就开始不理解了,我会给他们解释网络传输和服务器处理不是串行的,往往会出现你后发的请求却先收到回复,客户端 多线程情况下更为常见。当然也有有办法的。)
答:那我对每一个请求加一个唯一标识,这样我就可以分辨出来了。
问:你有没有考虑过由于connect,send,recv...这些系统API都是阻塞的,如果没有限制条件,会让你的一个请求卡住很长时间或者永远卡住?
问:你有没有考虑过短连接请求,长连接请求,服务端推送消息如何实现?
问:你有没有考虑过各种网络错误和异常的监控和处理,比如TCP长连接网络断开后的自动重连?
问:你有没有考虑过如果你把网络层或者网络数据层和前台业务和界面混杂在一起后的代码混乱复杂度?
问:你对TCP了解多少,仅仅是会用网络编程的API还是知道TCP还拥有一些诸如TIME_WAIT、TCP_NODELAY...的状态或特性,你知道经常说的粘包是怎么回事吗?
往往这些问题问出来一个或者几个之后一些人就会意识到凭他目前对网络编程的把控还不足以写一个生产级别的客户端网络库,其实我曾经也有过类似认为客户端网络库实现很sample的native的想法,但是当我配合着服务端用年计的时间逐渐在测试和生产环境中写出和完善出一个客户端网络库后才意识到它真的并不简单。
一切尽在不言中,程序员最好的交流语言就是代码,希望我的语言不至于很晦涩难懂。感兴趣的朋友可以参考我的github上的RPC_Framework这个项目参考一下我的网络库的写法,目前在公司生产环境中我已提供了linux平台、android平台、ios平台、windows平台的版本。github上的工程减少了一些功能,其中windows的版还未完全完成,希望大家能够提出宝贵的意见。
客户端网络库实现真的很简单吗?相关推荐
- i春秋题库之真的很简单
题目:真的很简单 第一次模拟渗透测试记录 第一题:获取网站管理员的密码 第二题:获取网站后台目录名 第三题:获取管理员桌面flag信息 第一次模拟渗透测试记录 参考目录:[1]https://blog ...
- p20华为云电脑白屏_教你一招让华为P20秒变电脑,真的很简单!
教你一招让华为P20秒变电脑,真的很简单! 2018年05月30日 17:45作者:鸿雁编辑:鸿雁 分享 华为P20/P20 pro发布至今已经两个多月,因为有着AI加持带来了更出色的拍照性能和更流畅 ...
- 指纹、面部、语音识别技术,破解真的很简单!| 知乎
原标题:指纹.面部.语音识别技术,破解真的很简单!| 知乎 面部识别被今年央视315晚会狠狠地 打脸,这一技术并没有成熟到能令人 们放心使用的地步,但已经被普遍采 用到各种智能终端上,智能手机便是 其 ...
- python网络爬虫程序_Python写的网络爬虫程序(很简单)
Python写的网络爬虫程序(很简单) 这是我的一位同学传给我的一个小的网页爬虫程序,觉得挺有意思的,和大家分享一下.不过有一点需要注意,要用python2.3,如果用python3.4会有些问题出现 ...
- 做饭真的很简单!做饭扫盲贴!
http://bbs.mosh.cn/889225.html <上一页 12下一页> 第1页第2页 评分 Is meng 威望值 530/800 发表 23 回复 345 积分 1 ...
- 苹果系统虚拟计算机win7,Mac虚拟机安装Win7 64位系统教程_苹果虚拟机安装Win7真的很简单...
使用苹果笔记本的朋友一开始都是MAC原装系统,当然对于要玩游戏和工作的朋友来说Mac肯定不行,不管是工作需要还是测试在苹果电脑上安装Win7系统都是必要的,除了安装双系统之外,Mac虚拟机安装Win7 ...
- iChunqiu【竞赛训练营】真的很简单
题目地址:真的很简单 对于我这样的菜鸟来说,真的一点都不简单,几乎花了一天的时间才最终拿到了flag. 题目提示:请访问http://file.ichunqiu.com/49ba59ab下载dedeC ...
- 这3款音频文件转文字工具,操作真的很简单
随着网络技术的发展,我们的工作方式也在不断变化.例如以前的音频文件需要我们手写转换,而现在可以借助音频工具来转文字.不仅提高工作效率,而且使用更加方便.不过现在的音频转换工具也五花八门,有时让人很难抉 ...
- 《零基础看得懂的C语言入门教程 》——(十一)C语言自定义函数真的很简单
一.学习目标 了解C语言的自定义函数的使用方法 了解C语言自定义函数的传参 了解C语言自定义函数的返回值 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习误区 ...
最新文章
- MVC已经死了,接下来会发生什么?
- 安卓盒子运行 linux,全志 Allwinner A20 机顶盒刷入原生 Debian
- iOS开发入门知识归纳
- spark Docker镜像构建及push脚本
- 5G NR PUCCH资源配置
- mybatis文件中SQL总结
- Java-Android 之Hello World
- Objective-C 相关Category
- Ulysses for Mac(最好用的纯文本编辑器)v22(65099)直装版
- 数字图像处理matlab 版下载,数字图像处理(MATLAB版)
- 打印机服务器启用后自动关闭,打印机print spooler服务启动后总是自动停止的解决方法(没测试)...
- 人工智能对医疗和健康产业的冲击和革命——意识上传技术展望
- Desmos图形计算器创建回归方程
- 第一次独立使用无人船记录日志—第1天
- 小甜甜布兰妮 天后神马时候才能消停点the soklo
- php调用原生java程序
- mysql事务转账_模拟数据库事务实现转账
- ios label文字行间距_ios实践之Label 字间距、行间距、两端对齐、分行显示
- CSDN博客放google广告
- 数据分析软件测试哪个好,国内主流运营数据分析工具综合对比评测
热门文章
- 使用Log4j - Java异常处理
- 为内置对象添加原型方法 把局部变量编程全局变量
- Ribbon源码解析(二)
- java1121123211234321_使用for 语句打印显示下列数字形式:n=4 1 1 2 1 1 2 ,使用for 语句打印显示下列数字形式:n=4...
- 语音控制面板 通过linux_在Linux中,通常把设备作为( )来处理.
- Vim键盘图/Vim快捷键
- C# Directory.Exists() 文件存在但返回一直为false
- 五周第四次课(4月23日)
- Angular2 从搭建环境到开发
- 使用ASP.NET 2.0进行记录错误