当前位置:  开发笔记 > 编程语言 > 正文

c ++开发人员应该了解网络编程的一切吗?

如何解决《c++开发人员应该了解网络编程的一切吗?》经验,为你挑选了1个好方法。

因此,我正在使用Boost :: Asio(或者只是Asio)进行大量高性能网络编程,并且非常可靠地掌握TCP和UDP协议的基本要素.我想知道,因为尽管我知道,我仍然不认为自己是网络专家,有什么方法可以构建网络程序员应该知道的基本要素,特别是那些试图推动其大型网络性能的人应用程序?

关于程序员以及他们应该了解的内存(见下文),有一篇很棒的文章,所以我想知道是否有人为网络做了类似的事情.

每个程序员应该了解内存



1> Tom..:

有些项目指出了我应该知道的事情:

TCP的工作原理和原因... 3路握手,确认,延迟确认,唠叨,滑动窗口协议.这些功能中的每一个都有一个具体的原因......如果处理不当,它们都会破坏应用程序的性能.

UDP多播...即使你从未想过你会使用它,你需要知道它为什么存在,这样你就可以在设计系统时做出明智的决定.

IP碎片,以及MTU的影响.

二进制序列化和网络字节排序(即使您只是要使用Google原型缓冲区,也很高兴了解它们为什么有效).

Ascii序列化和消息框架(\r\n\r\n在HTTP 中意味着什么?)

不同的I/O调度模型:Apache样式的preforking,每个连接的线程,基于事件的单线程,基于事件的工作线程等.

网络应用程序中缓冲区溢出漏洞的影响

基于协议的设计,与基于API或库的设计相反

异步与同步协议.许多高性能系统都是异步的.HTTP是同步的,除非你使用流水线技术,即便如此,对可能的内容有很多限制......例如,没有无序响应.


更新:基于协议的设计意味着什么?

考虑HTTP,即网络协议.Apache,IIS,Lighttpd,Firefox,Opera,WebKit等......所有这些软件都讲HTTP.很可能他们都没有共享代码来这样做.当然,缺点是由于代码净量导致的错误可能性增加.有许多好处:

无论实现语言如何,任何程序都可以通过HTTP进行通信

轻量级/嵌入式环境可以选择协议的一个子集,而不是使用整个协议

可以针对特定情况优化协议处理程序.在不牺牲普遍性的情况下优化库是不可能的.

各种不同的实现迫使库提供程序解决错误(而不是仅仅将它们删除,因为每个人都使用相同的库).

HTTP用户没有组织或合同负担,没有许可费用.

在设计网络协议时,您可以自己构建几个API,每个API都针对特定的用例进行定制.或者你可以建立一个,这取决于你.网络化软件组件可以相互独立升级.基本上,您听到的所有内容都与Java/C#接口和C++抽象类有关,但应用于网络层而不是编程语言层.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有