一、前言
原文链接:https://blog.csdn.net/libaineu2004/article/details/76906574
二、正文
免费跨平台SSH 和SFTP 工具:
https://www.putty.org/——Windows
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
https://www.poderosa-terminal.com/——Windows/Mac
https://filezilla-project.org/-- Windows/Mac/Linux -- https://download.filezilla-project.org/client/
英文https://filezilla-project.org/中文https://www.filezilla.cn/
在Mac上使用内置终端SSH功能——内置SFTP是文本输入类型,没有图形界面
建议使用XShell 或putty 进行Windows SSH -- https://www.portablesoft.org/xshell-legacy-versions/
Mac SSH建议使用内置终端命令
http://firecats-MacBook-Pro:~$ ssh root@172.16.17.135
建议使用FileZilla for Windows/Mac SFTP。通过CentOS 7 终端命令行安装FileZilla。
Github桌面工具,GitHubDesktop:
https://desktop.github.com/-- 支持Windows 64位和Mac系统
https://help.github.com/desktop/guides/帮助文档
https://tortoisesvn.net/
https://tortoisegit.org/
Wireshark
https://www.wireshark.org/download/win64/
https://accfcx.github.io/post/tools/
socket:大陆译为socket,台湾译为socket。感觉socket更容易理解。
https://blog.csdn.net/alitech2017 阿里科技公众号
http://coolshell.cn/陈浩
http://zhuanlan.51cto.com/columnlist/shenj/--- 58 陈健
http://blog.csdn.net/analogous_love --- 范丽张晓芳
https://www.cnblogs.com/balloonwj/--- 范丽张晓芳
https://github.com/baloonwj/flamingo --- 范丽张晓芳
http://blog.csdn.net/column/details/15700.html --- teamtalk
https://github.com/forhappy/Cplusplus-并发实践---《C++ 并发编程指南》
【select、poll、epoll区别总结】
epoll定时器实现系列文章:高性能定时器的三种实现方式——升序链表、时间轮、最小堆
TCP常见面试题:张小芳知乎直播:轻松解决技术面试常见网络通信问题
《腾讯后端开发》实习生技能要求
去BAT,你应该看看面试经验总结【面试三部曲1,推荐】
成功面试的关键,C++后台开发面试一般会考什么? 【采访三部曲2,推荐】
Linux服务器百度面试【面试三部曲3,推荐】
《Linux多线程服务端编程:使用muduo C++网络库》学习笔记【firecat编译,推荐】
我个人的Linux TCP Server和客户端测试源码,C语言(一)(firecat推荐)
我个人的Linux TCP服务器和客户端测试源码,C语言(二)(firecat推荐)
http://blog.csdn.net/libaineu2004/article/details/78490165
C++11 未来https://github.com/facebook/folly -- Facebook 开源C++ 库--- Folly: Facebook 开源库
https://github.com/facebook/folly/tree/master/folly/futures
详细讨论C++11 future的新特性和开源项目ananas(愚蠢,std c++11的future和ananas有什么区别?)——ananas、Qedis
ananas RPC源码分析-net库概述(一)
腾讯高性能RPC开发框架Tars实现服务治理(微服务)
腾讯微服务框架Tars简介
Tars C++版本编译
https://github.com/TarsCloud/Tars——重量级rpc
https://github.com/TarsCloud/TarsDocker -- docker,因为管理平台和基础服务的安装配置太复杂,所以创建了一个镜像
https://github.com/TarsCloud/TarsCpp
https://github.com/TarsCloud/TarsGo
https://github.com/腾讯/TSeer
https://github.com/Tencent/phxrpc -- 轻量级rpc
https://github.com/Tencent/mars -- 微信
https://www.lanindex.com/
https://github.com/Tencent/rapidjson --rapidjson
http://rapidjson.org/zh-cn/index.html
木多
Muduo是一个高质量的Reactor网络库,采用每线程一个循环+线程池架构实现。代码简洁,逻辑清晰。是学习网络编程的一个很好的例子。
http://blog.csdn.net/solstice --- 木多博客
https://github.com/chenshuo/muduo --- muduo官方boost版本
https://github.com/chenshuo/muduo/tree/cpp11 --- muduo官方C++11版本
https://github.com/chenshuo/muduo/tree/cpp98 --- Muduo官方C++98版本
发布基于Reactor模式的C++网络库
多线程服务器通用编程模型---oneloop per thread + threadpool
木多图书馆整体架构浅析
http://blog.csdn.net/KangRoger/article/category/5679833 muduo源码学习
http://www.cnblogs.com/peimin/category/548834.html muduo源码学习
使用C++11改造muduo -- https://github.com/AlexStocks/muduo
发布改编自muduuo的C++网络I/O库-- https://github.com/kimg-bo/kimgbo
开源网络库libevent muduo nginx分析.
C++仿muduo实现的多线程网络库,github搜索关键字‘C++11网络’
https://github.com/loveyacper/ananas -- 用C++11 编写的网络库和rpc
https://github.com/guangqianpeng/tinyev -- C++17 编写的网络库
https://github.com/guangqianpeng/jrpc -- C++17 编写的rpc
https://github.com/IronsDu/brynet -- 用C++11 编写的网络库
https://github.com/IronsDu/gayrpc——用C++14/17 编写的rpc
https://github.com/yedf/handy -- 用C++11 编写的网络库
https://github.com/xiongziliang/ZLToolKit -- C++11编写的网络库,支持windows
https://github.com/xiongziliang/ZLMediaKit -- 基于C++11的轻量级RTSP、RTMP、WebSocket、HTTP服务器和客户端框架
https://github.com/cpp-taskflow/cpp-taskflow -- 现代C++ 并行任务编程库
HP 插座
HP-Socket是一个通用的高性能TCP/UDP/HTTP通信框架,包括服务器组件、客户端组件和Agent组件。广泛适用于各种应用场景的TCP/UDP/HTTP通信系统。提供C/C++、C#、Delphi、E(Easy Language)、Java、Python等编程语言接口
https://github.com/ldcsaa/HP-Socket
https://gitee.com/ldcsaa/HP-Socket
https://www.oschina.net/p/hp-socket
https://www.cnblogs.com/ldcsaa
前交叉韧带
爱奇艺,郑树新,一个高级C/C++库
https://github.com/acl-dev/acl
https://github.com/acl-dev/libfibre
https://blog.csdn.net/zsxxsz
http://zsxxsz.iteye.com/
https://github.com/freeeyes/PSS
熊万平,网络io框架
https://github.com/xwpcom/CoreLooper
cpp-netlib
http://cpp-netlib.org/
https://github.com/cpp-netlib
360evpp
https://github.com/Qihoo360/evpp
https://github.com/Qihoo360/pika
利布夫
https://github.com/libuv/libuv——源代码,cmake
https://nikhilm.github.io/uvbook/index.html——文档
http://docs.libuv.org/en/v1.x/api.html——API
http://docs.libuv.org/en/v1.x/guide.html——用户指南
https://github.com/nodejs/http-parser -- http,可以与libuv结合使用
https://github.com/libevent/libevent——竞争对手
ec 是一个基于libevet 的C++11 包
https://git.oschina.net/havesnag/ec
关于TCP 的事情(第1 部分)
关于TCP 的事情(第2 部分)
mysql 连接池
C++实现数据库连接池
数据库连接池c++(msyql)mysql连接器c++的使用
基于Mysql Connector的数据库连接池的实现(C++)
redis+mysql数据同步(协作)C/C++实现
https://github.com/zsummer/zsummerX
https://github.com/zsummer/log4z
多进程、多线程高性能消息队列和锁
https://github.com/cameron314/concurrentqueue
kcp https://github.com/skywind3000/kcp
KCP是可靠的UDP,是一组保证UDP数据包有序且不丢失的纯算法。那么问题来了,这不是在说tcp吗?为什么UDP应该是可靠的?原因是有很多场景需要非常高的网络延迟。游戏中的实时战斗就是这样的场景。如果直接使用TCP,延迟太高,会卡住。如果直接使用UDP,会出现丢包的情况。紊乱。 kcp和tcp都是保证可靠的,但问题是为什么kcp在保证可靠性的情况下比tcp更快。 TCP 是很多年前设计的。 TCP在低延迟场景下并不是很胜任。 KCP改善了TCP的缺点:RTO加倍与不加倍、快速重传、延迟ACK与非延迟ACK、选择性重传与全部重传。也就是说,tcp是实现并编译到操作系统中的,而kcp是一套基于udp传输的算法,可以灵活调整一些参数来提高传输速度,减少延迟。
------
多线程编程模型
在学习muduo网络库之前,首先应该熟悉多线程网络服务编程模型。 6.6.2 节介绍了11 种解决方案。方案0到4使用阻塞I/O。方案5至方案11均使用非阻塞I/O。
选项0:接受+读/写
选项0不是并发模型,它只是循环处理。用代码来表达,可以表示为:
while(true){intfd=accept(…);read(fd,…)orwrite(fd…);close(fd);} 一次只能处理一个连接。第一个连接处理完后,进入下一个周期,否则会阻塞在I/O读或写上。
选项1接受+分叉
这是一个并发模型。这个模型比较简单。 accept后,fork一个子进程,并在子进程中处理连接。可以表示为:
while(true){intfd=accept(linstenFd,……);intpid=fork();if(pid==0)//child{close(listenFd);读/写(fd……);close(fd) ;}//Parentclose(fd);} 这个模型需要注意的是,监听的fd必须在子进程中关闭,传入连接的fd必须在父进程中关闭。
方案2接受+线程
该方案与方案一类似,不同之处在于该方案创建了一个新的线程来处理连接,而方案一中则创建了一个新的线程来处理连接。
voidProcessIO(void*arg){intfd=*static_castint*arg;读取/连线(fd,);关闭(fd);}voidProcessAccept(){while(true){intfd=accept(.);pthread_create (.NULL,ProcessIO,fd);}}}首先调用ProcessAccept等待连接。如果有连接,则创建一个新线程来调用ProcessIO,并将新创建连接的fd传递给该函数。
选项3 预叉
这与选项1 类似,只不过首先创建进程。当连接到来时,这些进程可以立即使用。详情请参考http://www.t086.com/code/apache2.2/mod/prefork.html
选项4 预线程
这和选项2类似,先创建线程,节省连接到来时创建线程的开销。
方案5 poll(reactor):非阻塞IO+IO复用
该方案基于I/O复用select/poll/epoll;重用的是进程,而不是I/O。这是一个单线程/进程的解决方案。 I/O事件到达后,直接在当前线程/进程中处理I/O。在单线程/进程Reactor模式下,处理当前I/O事件时,如果有新的I/O事件到来,则无法及时响应。无法保证此类事件的优先级。
Lighttpd、libevent、libev均采用此方案。
方案6reactor+thread-per-task
这种解决方案是为每个I/O事件创建一个线程,并在新创建的线程中处理该I/O事件。请注意,为每个I/O 事件创建一个线程,而不是为每个连接创建一个线程。这样,每个新创建的线程处理I/O事件的结果可能是乱序的,即多次处理后的顺序和请求顺序可能不一样。
方案7 反应堆+工作线程
为了避免解决方案6中的乱序问题,在该解决方案中,为每个连接创建一个线程。但线程数受到CPU的限制。
方案8 反应堆+线程池
这个解决方案是在reactor线程中等待I/O事件。当I/O事件到来时,从线程池中取出一个线程(不是新创建的)来处理该I/O事件。
方案9 线程中的reactor Muduo和Netty都使用这个方案。负责在一个主Reactor中accept,然后将建立的连接fd放入子Reactor中。该连接上的所有操作都是在子Reactor中完成的。该方案的特点是每线程一个循环,多线程。
方案10 正在进行中的反应器
这是Nginx的解决方案,当连接之间没有交换时,这是一个很好的解决方案。每个Nginx 工作进程都有一个事件循环。
方案11 反应堆+线程池
这是选项8和选项9的混合。即使使用多个Reactor,有些负责接受,有些负责I/O事件的到来。然后使用线程池来处理I/O事件。
更多介绍请参见《Linux多线程服务端编程:使用muduo C++网络库》第3章。
1、必须使用单线程时:程序需要fork;限制CPU占用;
2、单线程的优缺点:简单,但没有事件的优先处理机制;
--------------------------------------------------好书推荐----------------------------------------------------------- ------
Linux C/C++学习:
Github源码学习:redis、Nginx、mosquitto、skynet、teamtalk、libuv、libevent、muduo、evpp、Netfox棋牌6603源码、张小芳easyMule、张小芳filezilla、张小芳flamingo、Gh0st、PCShare、郑书信acl 、ananas-rpc、Tars、美图twemproxy、zsummerX、log4z、libco、seastar
工具学习:cmake、keepalived/LVS、haproxy、CDN、kafka、log4xx、OpenResty、HBase、tengine
语言学习:lua、shell
书本学习:
《TCP/IP协议族》
《Netty权威指南(第2版)》
《Linux多线程服务端编程:使用muduo C++网络库》
《编程珠玑第2版·修订版》
《编程珠玑(续)(修订版)》
《Linux环境编程:从应用到内核》 -- Linux领域第一本应用编程与内核实现相结合的书
《构建高可用Linux服务器(第4版)》
《编程之美——微软技术面试心得》
《编程之法:面试和算法心得》
《剑指OFFER:名企面试官精讲典型编程题(第2版)》
《程序员代码面试指南:IT名企算法与数据结构题目最优解》
《数据结构(C语言版)(第2版) 严蔚敏 李冬梅 吴伟民 (编著)》 http://www.ryjiaoyu.com/book/details/3489
https://download.csdn.net/download/libaineu2004/10411905
《数据结构习题解析与实验指导 李冬梅 张琪 (编著)》
http://www.bjfuacm.com/struct/
《数据结构与算法分析:C语言描述(原书第2版)》
《算法:C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版)》
《算法基础:打开算法之门》 《算法导论》
《妙趣横生的算法(C语言实现) 第2版》
《程序员面试宝典(第5版)》
《深入理解计算机系统(第3版)》
《TCP/IP Illustrated,Volume 1》 -- TCP/IP 详解卷1 协议
《Advanced Programming in the UNIX Environment》 -- APUE,UNIX环境下的高级编程
《UNIX Network Programming》 -- UNP,UNIX网络编程
强烈推荐。书很厚,但你只需要读:的一小部分。第1-7章;基础知识,特别是了解TCP 的双工特性。第14章;了解聚集写/分散读。第16章;这是本书最重要的一章。第30章;也就是说,这么厚的一本书,你只需要读10章就可以了。现在你有信心了吗?
《More Effective C++》
《Effective STL》
《Effective modern C++》 -- 学习C++11只需要这本书,请耐心多读几遍。
《C++ Primer》 《Essential C++》
《深度探索C++对象模型》
《重构 改善既有代码的设计》
《UML精粹:标准对象建模语言简明指南(第3版)》
《代码整洁之道》
《代码整洁之道 程序员的职业素养》
MySQL学习:推荐几本学习MySQL的好书
---------------------------------------拿offer很简单----- --- ---------------------------------------------------------- ---
网站学习:
https://leetcode.com/-- LeetCode 英文站
https://leetcode-cn.com/-- LeetCode中文站
https://www.nowcoder.com/牛客网
http://zhedaht.blog.163.com/何海涛,《剑指Offer——名企面试官精讲典型编程题》
https://github.com/zhedaht/CodingInterviewChinese2 何海涛GitHub,《剑指Offer——名企面试官精讲典型编程题》 配套源码
https://www.julyedu.com/七月在线
https://github.com/julycoding 七月在线GitHub
https://blog.csdn.net/v_july_v/article/details/6543438 程序员访谈、算法研究、编程艺术、红黑树、机器学习五大系列合集
https://blog.csdn.net/v_july_v/article/details/49302193 《编程之法:面试和算法心得》 勘误表
https://github.com/arkingc/note/tree/master/interview 面试经验总结
三、总结
四、往期精彩汇总
GDB多线程之旅
肝脏!动态规划
C++中使用锁的注意事项
艰苦的递归
Muduo源码分析学习总结
标签:
用户评论
哎哟,看了这个标题我就想学习一下后端服务器了,毕竟现在技术更新这么快,不跟上可不行。
有19位网友表示赞同!
这个标题真直接,感觉作者就是那种直来直去的人,喜欢这样的风格。
有13位网友表示赞同!
每次提到后端服务器,我就头大,这篇博文能让我了解点什么吗?希望有帮助。
有17位网友表示赞同!
标题太实用了,我刚接触后端服务器,正愁不知道从哪里入手呢。
有11位网友表示赞同!
哈哈,这个标题太逗了,感觉自己就像是个小白,需要别人指点。
有9位网友表示赞同!
我一直在找关于后端服务器的资料,这个标题让我觉得有救了。
有12位网友表示赞同!
哎呀,后端服务器太复杂了,我看了标题都想放弃了,但想想还是得学。
有8位网友表示赞同!
标题很有针对性,希望内容也能让我这种新手快速上手。
有13位网友表示赞同!
每次看到后端服务器,我都觉得像看天书一样,这篇博文能让我明白点吗?
有20位网友表示赞同!
这个标题让我想起了自己的学习之路,虽然艰难,但总有办法的。
有5位网友表示赞同!
后端服务器对于我来说是个盲区,这篇博文对我来说是个福音。
有16位网友表示赞同!
看了标题我就想笑,感觉作者很幽默,期待看到他的干货分享。
有8位网友表示赞同!
标题太吸引人了,我猜里面一定有我需要的知识点。
有9位网友表示赞同!
后端服务器一直是我的痛点,这篇博文如果能帮我解决一些问题就太好了。
有14位网友表示赞同!
这个标题太接地气了,感觉作者很懂我们这些技术小白。
有11位网友表示赞同!
每次看到后端服务器,我都头疼,这篇博文希望能给我带来一丝希望。
有17位网友表示赞同!
这个标题让我想起了自己的学习历程,希望这篇博文能让我有所收获。
有7位网友表示赞同!
后端服务器对我来说是个谜,这篇博文如果能解开这个谜团就太棒了。
有9位网友表示赞同!
标题很有深度,感觉这篇博文会让我对后端服务器有全新的认识。
有5位网友表示赞同!