![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络服务器
文章平均质量分 79
起个别名
这个作者很懒,什么都没留下…
展开
-
详解TCP和UDP通信协议
一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和粘包问题。原创 2024-07-08 10:53:11 · 673 阅读 · 0 评论 -
必须掌握的Linux的九大命令
以人类可读的格式(如KB、MB、GB)显示内存使用情况。命令用于报告 CPU 统计信息和 I/O 设备负载。:列出tcp连接的网络占用详细信息(包括pid信息)显示网络连接、路由表、接口状态、伪装连接和多播成员。:显示系统中所有正在运行的进程及其详细信息。:显示 CPU 和 I/O 统计信息。命令用于配置和查看网络接口的参数。:仅显示指定设备的 I/O 统计信息。:捕获所有网络接口上的数据包。:仅捕获指定接口上的数据包。显示系统的内存使用情况。:作为客户端连接到服务器。:作为客户端连接到服务器。原创 2024-07-05 12:02:22 · 638 阅读 · 0 评论 -
详解Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是大数据生态中的重要组件。它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。它是一个为分布式应用提供一致性协调服务的中间件很多台计算机组成一个整体, 一个整体一致对外并且处理同一请求内部的每台计算机都可以相互通信(rest/rpc)客户端到服务端的一次请求到响应结束会经历多台计算机图示1图示2。原创 2024-07-02 21:35:24 · 753 阅读 · 0 评论 -
详解Muduo库
Muduo网络库:底层实质上为Linux的epoll + pthread线程池,且依赖boost库。muduo的网络设计核心为一个线程一个事件循环,有一个main Reactor负载accept连接,然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor),该连接的所用操作都在那个sub Reactor所处的线程中完成。多个连接可能被分派到多个线程中,以充分利用CPU,Reactor poll的大小是固定的,根据CPU的数目确定。原创 2024-07-01 22:25:21 · 1147 阅读 · 0 评论 -
一文带你搞懂protobuf
Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。官方解释:Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法。可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。原创 2024-07-01 22:14:55 · 807 阅读 · 0 评论 -
详解计算机网络
虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到广播信息,例如下图中(A1、A2、A3、A4)属于一个虚拟局域网,A1发送的广播会被A2、A3、A4收到,而其它站点收不到。目前的互联网是一种多层次ISP结构,ISP根据覆盖面积的大小分为主干ISP、地区ISP和本地ISP。计算机网络是任何IT从业者必备的基础知识,网络安全工程师也不例外,但事实上,却有许多朋友都不了解,今天用43张图详解计算机网络,包括。应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。原创 2024-06-01 10:29:46 · 338 阅读 · 0 评论 -
epoll最详细的介绍以及与epoll相关的问答题
在现实中,我们当然选择第一种方式,但是在计算机中,情况就要复杂一些。1)对一个fd调用EPOLL_ADD,如果这个fd上有用户关注的激活事件,则这个fd会被添加到readylist. 2)对一个fd调用EPOLL_MOD改变关注的事件,如果新增加了一个关注事件且对应的fd上有相应的事件激活,则这个fd会被添加到readylist. 3)当一个fd上有事件触发时(例如一个socket上有外来的数据)会调用ep_poll_callback(见eventpoll::ep_ptable_queue_proc),原创 2024-05-19 22:07:56 · 1010 阅读 · 1 评论 -
详解网络服务器中的IO模型
如何实现这样的高并发?在select/poll时代,服务器进程每次都把这100万个连接告诉操作系统(从用户态复制句柄数据结构到 内核态),让操作系统内核去查询这些套接字上是否有事件发生,轮询完成后,再将句柄数据复制到用 户态,让服务器应用程序轮询处理已发生的网络事件,这一过程资源消耗较大,因此,select/poll一般 只能处理几千的并发连接。同时,epoll_wait的效率也非常高,因为调用epoll_wait时,并没有 向操作系统复制这100万个连接的句柄数据,内核也不需要去遍历全部的连接。原创 2024-05-19 21:48:28 · 1027 阅读 · 1 评论 -
两种多线程编程方式:pthread 和 thread
由于互斥锁只有两种状态,这限制了它的用途,因此 POSIX 又提出了条件变量(Condition Variable)机制。条件变量允许线程在阻塞的时候等待另一个线程发送的信号,当收到信号后,阻塞的线程就被唤醒并试图锁定与之相关的互斥锁。可以看到,条件变量是需要结合互斥锁一起使用的。互斥锁(Mutex)常常被用来保护那些可以被多个线程访问的共享资源,比如可以防止多个线程同时更新同一个数据时出现混乱。POSIX 标准没有规定一个线程的堆栈大小。安全可移植的程序不会依赖于具体实现默认的堆栈限制,而是显式地调用。原创 2024-05-08 09:42:15 · 446 阅读 · 0 评论 -
ifconfig、IP详解
inet:表示IPV4网络地址标准协议,用点分隔的十进制数字表示,我这个电脑先前为自动,一直连不上有线网络,手动设置IPV4的地址、网关、掩码就可以连接成功,反正不能为自动,ifconfig显示也就没有inet,只有inet6。inet6:表示IPV6网络地址标准协议,好像禁用不掉,它是用冒号分隔的十六进制数字表示,相比于IPV4,可以提供更多的地址空间,更高的网络性能。lo:本地环回,不是真正的网卡,而是虚拟的软件实现的本地地址,用于本机的自通信。RUNNING代表网卡的网线被接上。原创 2024-05-06 20:18:12 · 189 阅读 · 1 评论 -
protobuf在rpc网络服务中的使用方法
它是一种序列化和反序列化协议,常见序列化和反序列化协议有XML、JSON、PB,相比于其他是文本存储,PB更有优势:跨平台语言支持,可以由C++传输到java,序列化和反序列化效率高速度快,因为是二进制存储且序列化后体积比XML和JSON都小很多,适合网络传输,XML逐渐弃用,JSON是键值存储方式,有额外的无用信息。原创 2024-05-06 12:42:11 · 465 阅读 · 0 评论 -
详解select、poll、epol
这些都是在IO多路复用,也就是在服务端如何处理多个客户端的请求事件,一个常见的思路就是采用多线程:对于不同的事件,新开一个线程,单独处理该事件。但是存在的弊端是:开辟线程会创建线程栈会消耗资源,且不同线程会进行CPU的上下文切换,切换时要处理多个操作句柄,所以多线程不是好的方案。 首先用一个描述符集合也就是数组监听多个文件描述符,存储了多个监听的fd,然后将这个数组FD_SET转为bitmap,select会将这个bitmap会从用户态拷贝进入内核态,在内核中通过遍历的方式以阻塞的方式判断是否原创 2024-05-06 12:15:07 · 418 阅读 · 0 评论