不知道后台服务器学什么的快点看过来

834 阅读12分钟

一、前言

相信很多朋友,很多志在学习后台服务器开发,想在这一邻域有一些作为,但是经常苦苦不知道学习什么,我也经常想要收集一些博客分享给大家,但是苦苦时间不是那么充足,不过还好,有很多优秀的博主为们准备好了,在这里,感谢这些优秀的博主;

这篇文章来自于CSDN社区---作者:libaineu2004

链接原文:blog.csdn.net/libaineu200…

二、正文

免费的跨平台SSH和SFTP工具:

www.putty.org/ -- Windows

www.chiark.greenend.org.uk/~sgtatham/p…

www.poderosa-terminal.com/ -- Windows/Mac

filezilla-project.org/ -- Windows/Mac/Linux -- download.filezilla-project.org/client/

英文 filezilla-project.org/ 中文 www.filezilla.cn/

Mac下使用自带终端SSH功能 -- 自带的SFTP是文本输入型的,没有图形界面

Windows SSH推荐使用XShell或者putty -- www.portablesoft.org/xshell-lega…

Mac SSH推荐使用自带的终端命令

http://firecats-MacBook-Pro:~$ ssh root@172.16.17.135

Windows/Mac SFTP推荐使用FileZilla,CentOS 7终端命令行方式安装FileZilla

Github桌面版工具,GitHubDesktop:

desktop.github.com/ -- 支持Windows 64bit和Mac系统

help.github.com/desktop/gui… 帮助文档

tortoisesvn.net/

tortoisegit.org/

Wireshark

www.wireshark.org/download/wi…

accfcx.github.io/post/tools/

socket:中国大陆翻译为套接字,台湾翻译为插座。感觉插座更容易理解。

blog.csdn.net/alitech2017 阿里技术官方号

coolshell.cn/ 陈皓

www.taohui.pub/ -- 陶辉,《深入理解Nginx:模块开发与架构解析(第2版)》作者

blog.csdn.net/russell_tao -- 陶辉,《深入理解Nginx:模块开发与架构解析(第2版)》作者

blog.csdn.net/nsrainbow --- 杨曦,《HBase不睡觉书》作者

zhuanlan.51cto.com/columnlist/… --- 58沈剑

blog.csdn.net/analogous_l… --- 范蠡&张小方

www.cnblogs.com/balloonwj/ --- 范蠡&张小方

github.com/baloonwj/fl… --- 范蠡&张小方

blog.csdn.net/column/deta… --- teamtalk

github.com/forhappy/Cp… --- 《C++ 并发编程指南》

select、poll、epoll之间的区别总结[整理]

epoll定时器实现系列文章:高性能定时器实现的三种方式---升序链表,时间轮,最小堆

TCP面试常见题:张小方的知乎Live:轻松搞定技术面试中常见的网络通信问题

『腾讯后台开发』实习生技能要求

去BAT,你应该要看一看的面试经验总结 【面试三部曲1,推荐】

面试成功必备,C++ 后台开发面试时一般考察什么?【面试三部曲2,推荐】

Linux服务器百度面试【面试三部曲3,推荐】

《Linux多线程服务端编程:使用muduo C++网络库》学习笔记 【firecat整理,推荐】

我个人的Linux TCP Server和client测试源码,C语言(1)(★firecat推荐★)

我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★)

C/C++语言版本的http server和client,请关注

blog.csdn.net/libaineu200…

C++11 future github.com/facebook/fo… -- Facebook开源C++库 --- Folly: Facebook Open-source Library

github.com/facebook/fo…

详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?) -- ananas, Qedis

ananas RPC源码分析-net库概览(一)

腾讯高性能RPC开发框架Tars实现服务治理(微服务)

腾讯微服务框架Tars介绍

Tars C++版本的编译

github.com/TarsCloud/T… -- 重量级rpc

github.com/TarsCloud/T… -- docker,由于管理平台和基础服务安装配置太复杂,所以搞了个镜像

github.com/TarsCloud/T…

github.com/TarsCloud/T…

github.com/Tencent/TSe…

github.com/Tencent/phx… -- 轻量级rpc

github.com/Tencent/mar… -- weChat

www.lanindex.com/

github.com/Tencent/rap… -- rapidjson

rapidjson.org/zh-cn/index…

muduo

muduo是一个高质量的Reactor网络库,采用one loop per thread + thread pool架构实现,代码简洁,逻辑清晰,是学习网络编程的很好的典范。

blog.csdn.net/solstice --- muduo blog

github.com/chenshuo/mu… --- muduo官方boost版本

github.com/chenshuo/mu… --- muduo官方C++11版本

github.com/chenshuo/mu… --- muduo官方C++98版本

发布一个基于 Reactor 模式的 C++ 网络库

多线程服务器的常用编程模型 --- oneloop per thread + threadpool

muduo库整体架构简析

blog.csdn.net/KangRoger/a…

www.cnblogs.com/peimin/cate…

使用C++11改造muduo -- github.com/AlexStocks/…

发布一个改写自muduo的C++网络I/O库 -- github.com/kimg-bo/kim…

开源网络库的分析libevent muduo nginx ...

C++仿造muduo实现的多线程网络库,github检索关键词"C++11 network"

github.com/loveyacper/… -- C++11写的网络库和rpc

github.com/guangqianpe… -- C++17写的网络库

github.com/guangqianpe… -- C++17写的rpc

github.com/IronsDu/bry… -- C++11写的网络库

github.com/IronsDu/gay… -- C++14/17写的rpc

github.com/yedf/handy -- C++11写的网络库

github.com/xiongzilian… -- C++11写的网络库,支持windows

github.com/xiongzilian… -- A lightweight RTSP, RTMP, WebSocket, HTTP server and client framework based on C++11

github.com/cpp-taskflo… -- Modern C++ Parallel Task Programming Library

HP-Socket

HP-Socket是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口

github.com/ldcsaa/HP-S…

gitee.com/ldcsaa/HP-S…

www.oschina.net/p/hp-socket

www.cnblogs.com/ldcsaa

ACL

爱奇艺,郑树新,One advanced C/C++ library

github.com/acl-dev/acl

github.com/acl-dev/lib…

blog.csdn.net/zsxxsz

zsxxsz.iteye.com/

github.com/freeeyes/PS…

熊万平,网络io框架

github.com/xwpcom/Core…

cpp-netlib

cpp-netlib.org/

github.com/cpp-netlib

360 evpp

github.com/Qihoo360/ev…

github.com/Qihoo360/pi…

libuv

github.com/libuv/libuv -- 源码,cmake

nikhilm.github.io/uvbook/inde… -- 文档

docs.libuv.org/en/v1.x/api… -- api

docs.libuv.org/en/v1.x/gui… -- user guide

github.com/nodejs/http… -- http,可以和libuv结合起来使用

github.com/libevent/li… -- 竞争者

ec是基于libevet的C++11封装

git.oschina.net/havesnag/ec

TCP 的那些事儿(上)

TCP 的那些事儿(下)

mysql连接池

c++ 实现数据库连接池

数据库连接池c++ (msyql) mysql connector c++ 的使用

基于Mysql Connector(C++)的数据库连接池的实现

redis+mysql数据同步(协同)C/C++实现

github.com/zsummer/zsu…

github.com/zsummer/log…

多进程,多线程高性能消息队列和锁

github.com/cameron314/…

kcp github.com/skywind3000…

kcp是一种可靠udp,是一套纯算法的来保证udp包有序、不丢失。那么问题来了,这说的不就是tcp吗?为啥还要可靠udp这个东西,原因在于有很多场景对网络延迟要求非常高,游戏中的实时对战就是这样的场景,如果直接使用tcp延迟太高会很卡,如果直接使用udp会丢包,无序。kcp和tcp都会保证可靠,但问题时kcp为何在保证可靠的情况下比tcp快。tcp时很多年前设计的,在低延迟的场景下tcp并不能很好的胜任,kcp改进了tcp的不足:RTO翻倍vs不翻倍、快速重传、延迟ACK vs 非延迟ACK、选择性重传 vs 全部重传。换句话说,tcp的实现并编译进了操作系统,而kcp是一套算法,基于udp传输,可以灵活的调整一些参数来提高传输速度,降低延迟。


多线程编程模型

在学习muduo网络库前,应该先熟悉一下多线程网络服务编程模型。在6.6.2节介绍了11种方案。方案0到方案4用的是阻塞I/O。方案5到方案11用的都是非阻塞I/O。

方案0: accept+read/write

方案0不是并发模型,只是一个循环处理。用代码表示的话,可以表示为:

while(true){    int fd=accept(……);    read(fd,……) or write(fd……);    close(fd);}

一次只能处理一个连接,第一个连接处理完毕后,才可以进入下一次循环,否则阻塞在I/O的read或write上。

方案1 accept+fork

这是个并发模型,这个模型比较简单,在accept后,fork一个子进程,在子进程处理连接。可以表示为:

while(true){    int fd=accept(linstenFd,……);    int pid=fork();    if(pid==0)//child    {        close(listenFd);        read/write(fd……);        close(fd);    }    //Parent    close(fd);}

这个模型中要注意的是,要在子进程关闭监听的fd,在父进程关闭到来连接的fd。

方案2 accept+thread

这个方案和方案1类似,只是这个方案中是通过新建了线程来处理连接,方案1是通过新建线程来处理连接。

void ProcessIO(void* arg){    int fd=*static_cast<int *>arg;    read/wire(fd,……);    close(fd);} void ProcessAccept(){    while(true)    {        int fd=accept(……);        pthread_create(……, NULL, ProcessIO, &fd);    }    }}

先调用ProcessAccept等待连接,如果有连接,则创建新线程来调用ProcessIO,把新建连接的fd传给这个函数。

方案3 prefork

这个和方案1类似,只是先创建好进程。当有连接到来时,可以马上使用这些进程。具体可以参考www.t086.com/code/apache…

方案4 pre thread

这和方案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采用这种方案。

方案6 reactor+thread-per-task

这个方案是为每一个I/O事件创建一个线程,在新建的线程中处理I/O事件。注意,这里是为每个I/O事件创建一个线程,而不是为每个连接创建线程。这样一来,每个新建线程处理的I/O事件的结果会有out-of-order的可能,即多次处理后的顺序和请求顺序未必一直了。

方案7 reactor+worker thread

为了避免方案6中的out-of-order的问题,在这个方案中,为每个连接创建一个线程。但是线程数目受限于CPU。

方案8 reactor+thread pool

这个方案是,在reactor线程中,等待I/O事件,当I/O事件到来时,在thread pool中取出一个线程(不是新创建)来处理I/O事件。

方案9 reactors in threads muduo和Netty采用的是这种方案。在一个main Reactor中负责accept,之后把建立的连接fd放到sub Reactor中,这个连接的所有操作都在sub Reactor中完成。这个方案的特点是one loop per thread,有多个thread。

方案10 reactors in process

这个是Nginx的方案,连接之间无交换时,这是很好的解决方案。Nginx每个工作进程都有一个event loop。

方案11 reactors+thread pool

这是方案8和方案9的混合体。即使用多个Reactor,有的负责accept,有的负责I/O事件的到来。再使用线程池,处理I/O事件。

更多的介绍请参见《Linux多线程服务端编程:使用muduo C++网络库》第3章。

1、必须用单线程的场合:程序需要fork;限制CPU占有率;

2、单线程优缺点:简单,但是事件没有优先级处理机制;

--------------------------------------------好书推荐-----------------------------------------------------

Linux C/C++学习:

github源码学习:redisNginxmosquittoskynetteamtalklibuvlibeventmuduoevpp,网狐棋牌6603源码,张小方easyMule张小方filezilla张小方flamingo,Gh0st,PCShare,郑树新aclananas-rpcTars美图twemproxyzsummerXlog4zlibcoseastar

工具学习:cmake,keepalived/LVS,haproxy,CDN,kafka,log4xx,OpenResty,HBase,tengine

语言学习:lua,shell

书籍学习:

《Linux高性能服务器编程》 -- 作者:游双 download.csdn.net/download/an…

《TCP/IP协议族》

《Netty权威指南(第2版)》

《Linux多线程服务端编程:使用muduo C++网络库》

《编程珠玑第2版·修订版》

《编程珠玑(续)(修订版)》

《Linux环境编程:从应用到内核》 -- Linux领域第一本将应用编程与内核实现相结合的图书

《构建高可用Linux服务器(第4版)》

《编程之美——微软技术面试心得》

《编程之法:面试和算法心得》

《剑指OFFER:名企面试官精讲典型编程题(第2版)》

《程序员代码面试指南:IT名企算法与数据结构题目最优解》

《数据结构(C语言版)(第2版) 严蔚敏 李冬梅 吴伟民 (编著)》 www.ryjiaoyu.com/book/detail…

download.csdn.net/download/li…

《数据结构习题解析与实验指导 李冬梅 张琪 (编著)》

www.bjfuacm.com/structure/

《数据结构与算法分析:C语言描述(原书第2版)》

《算法:C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版)》

《算法基础:打开算法之门》《算法导论》

《妙趣横生的算法(C语言实现) 第2版》

《程序员面试宝典(第5版)》

《深入理解计算机系统(第3版)》

作者:[美]W. Richard Stevens

《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章;了解gather write/scatter read. 第16章;这是本书最最重要的一章。 第30章; 也就是说,这么厚的书,只需要读10章足矣,现在有信心了吗?

作者:(美)梅耶(Scott Meyers)四部曲: 《Effective C++》 -- 有人说C++程序员可以分成两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版的确当得起这样的评价。当您读过这本书之后,就获得了迅速提升自己C++功力的一个契机。

《More Effective C++》

《Effective STL》

《Effective modern C++》 -- 学习C++11只需要这一本书,请耐心多读几遍。

作者:(美) Stanley B. Lippman著

《C++ Primer》 《Essential C++》

《深度探索C++对象模型》

作者:[美]Martin Fowler 著

《重构 改善既有代码的设计》

《UML精粹:标准对象建模语言简明指南(第3版)》

作者:[美]Robert C. Martin 著

《代码整洁之道》

《代码整洁之道 程序员的职业素养》

MySQL学习:推荐几本学习MySQL的好书

---------------------------------------好拿offer-------------------------------------------------------

网站学习:

leetcode.com/ -- LeetCode英文站点

leetcode-cn.com/ -- LeetCode中文站点

www.nowcoder.com/ 牛客网

zhedahht.blog.163.com/ 何海涛,《剑指Offer——名企面试官精讲典型编程题》

github.com/zhedahht/Co… 何海涛GitHub,《剑指Offer——名企面试官精讲典型编程题》配套源码

www.julyedu.com/ 七月在线

blog.csdn.net/v_JULY_v 七月在线,《编程之法:面试和算法心得》作者

github.com/julycoding 七月在线GitHub

blog.csdn.net/v_july_v/ar… 程序员面试、算法研究、编程艺术、红黑树、机器学习5大系列集锦

blog.csdn.net/v_july_v/ar… 《编程之法:面试和算法心得》勘误

github.com/arkingc/not… 面经汇总

三、总结

这些都是很优秀的开源代码和优秀的博主分享的文章,我们在前进的道路上,只有不断汲取别人的经验和自己的实践,才能走的更远~

四、往期精彩汇总

GDB 多线程之旅

肝!动态规划

C++使用锁注意事项

呕心沥血的递归

muduo源码剖析学习总结

欢迎关注公众号---后台服务器开发,更多精彩等你来看~