免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8996 | 回复: 20

字节序与网络库 [复制链接]

论坛徽章:
0
发表于 2010-06-07 17:06 |显示全部楼层
周六被猎头推荐去阿里巴巴面试。复试的时候,谈到了我写的一个跨平台网络库。当时面试官问我,有没有对字节序的处理?我说没有,但可以提供这个功能。不过我认为这个应该是用户的自定义协议去处理的问题。当时面试官乐了,说,作为一个用户,难道我还要去自己处理字节序转换的问题么?难道你的库就不能自动处理么?我当时没再接话。我想,我库是可以统一转换为一种统一的字节序,然后再进行传输,相关部分对用户透明。但是万一双方的机器字节序是相同的,且刚好和库设定的统一字节序相反,那岂不白白浪费系统资源,降低性能?

如果要智能,那有两种方式。
1. 我的库之间加入一个协议,进行一次封包。该协议在TCP/UDP与用户协议之间。封包有一个字节表示:32位大端、32位小端、64位大端、64位小端。然后再在该类型字节后面加入一个32比特字段,指示封包长度,或序号信息(针对UDP协议)。用户私有协议全建立在库的协议之上。
但这有两个问题:
a. 如果通讯器中一方不使用我的库开发的呢?那这协议应该立刻无效,否则就是我给库的用户强加了一个要求:通讯双方均要用我的库开发。但如果协议无效了,那么,是不是该用户自己编程也好,调我的功能函数也好,自己过来处理这个问题呢?
b. 多了这么一层封包解包,而封包其实就带一个信息:包的字节序。为了带上这个信息,结果我需要多带另外两个信息:包的序号和包长。为了1块钱的收益,花了2块钱。如果传输频率很高,累积下来将白白耗费不少不必要的机器资源。

2. 用户自己过来处理这件事。在用户自定义协议中加入字节序的识别。只要收方看到字节序和本机相同,且机器字长相同,就不作处理;只有以上两者有不同时,才调用库的功能函数处理,或自己处理(系统就有这样的函数,简单封装一下就行,一点也不难)。

我想,大部分的公司,就服务器段而言,设备都是批量买的,一般都是统一架构的CPU;而且就客户端而言,小端存储(IA-32/64架构,比如Intel的Core 2),占了市场很大一部分。数据包包体内容不同字节序之间的转换其实发生频率相对很低。如果要偷懒让100%的网络操作为一个相对的小概率事件买单(任何一次网络接收或者发送,进行不一定需要的网络字节序转换,或者多一层封包),那是很错误的行为。
不知道大家的看法是怎样的呢?

论坛徽章:
0
发表于 2010-06-07 17:12 |显示全部楼层
私有协议不用每次都转,因为私有协议的两端都是自己的程序控制的。TX的好多网络应用就没转吧。节省CPU资源。
楼主如果做通用的东西,应该转为网络字。

论坛徽章:
0
发表于 2010-06-07 17:14 |显示全部楼层
重点是,你把你发帖的这个帖的内容告诉那个面试官就可以了,哈哈哈哈

论坛徽章:
0
发表于 2010-06-07 17:17 |显示全部楼层
回复 2# 没本


   我做的是通用库。不过我觉得应该是发现两端不同后,才转的,相同就没有必要转了。如果是TCP,第一次发送的时候,加一个识别标识就行,UDP的话,每个封包都需要加识别标识。

论坛徽章:
0
发表于 2010-06-07 17:24 |显示全部楼层
回复 3# xyfree


    哎,本来想说的。后来一想,对方连libevent都不知道,光觉得我就该去用ACE,感觉鸡同鸭讲,就没再说了~~~
    如果是传言中的压力面试的话,我可不想在一个经常被人羞辱欺凌的环境中工作。好公司又不只有阿里一家……

论坛徽章:
0
发表于 2010-06-07 17:32 |显示全部楼层
肯定是大端了, 不解释

论坛徽章:
0
发表于 2010-06-07 17:43 |显示全部楼层
如果是网络传输库,肯定不用管大小端问题,想管也管不来,

如果是协议定义和协议解析库,肯定要管大小端问题,想不管都不行,

林子大了,什么水平都有,不用太在意。。。。

论坛徽章:
0
发表于 2010-06-07 18:18 |显示全部楼层
回复 5# swxlion


    ACE真的拿来用在生产环境的话,用一个死一个。Boost.asio到还真有人用的。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2010-06-07 21:49 |显示全部楼层
周六被猎头推荐去阿里巴巴面试。复试的时候,谈到了我写的一个跨平台网络库。当时面试官问我,有没有对字节 ...
swxlion 发表于 2010-06-07 17:06



    我们只在包头考虑这些问题,包体只有一种类型-byte流,一切问题由用户自行考虑,但框架可以提供一些工具供用户使用。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2010-06-07 22:01 |显示全部楼层
求扫盲……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP