Linux网络编程
文章平均质量分 87
Linux后台开发狮
分享c/c++Linux服务器开发技术行业资讯
展开
-
【23秋招c++后端面试技术突围】C++11线程池的实现原理及回调函数的使用
当有新的任务进来,从线程池中取出一个空闲的线程处理任务然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用。当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行。任务队列负责存放主线程需要处理的任务,工作线程队列其实是一个死循环,负责从任务队列中取出和运行任务,可以看成是一个生产者和多个消费者的模型。在上述的场景中必然会频繁的创建和销毁线程,这样的开销相信是不能接受的,此时线程池技术便是很好的选择。原创 2022-09-30 21:56:10 · 344 阅读 · 0 评论 -
【23秋招c++后端面试技术突围】 操作系统与存储:解析Linux内核全新异步IO引擎io_uring设计与实现(上)
存储场景中,我们对性能的要求非常高。在存储引擎底层的IO技术选型时,可能会有如下讨论关于IO的讨论。看完这段话,读者可能会有如下的问题。,众多新特性中,与存储领域相关度最高的便是最新的IO引擎——io\_uring。从一些性能测试的结论来看,io\_uring性能远高于native AIO方式,带来了巨大的性能提升,这对当前异步IO领域也是一个big news。原创 2022-09-29 21:19:39 · 199 阅读 · 0 评论 -
用户态协议栈的设计实现
netmap是一个高效的收发报文的I/O框架,需要在Linux下编译使用。运行netmap时,此框架会接管主机的显卡,使显卡的数据发送给内核协议栈处理,转而发送给netmap框架处理。当netmap框架启动后,显卡中的数据被通过mmap映射到内存中。mmap的映射过程由DMA控制。映射后,用户就能直接操作内存中的网络数据了。关键函数分析:nm_open:创建一个指向网卡的文件描述符。nm_nextpkt:接收网卡中的数据,返回一个指向数据头的指针。原创 2022-09-26 16:42:16 · 101 阅读 · 0 评论 -
UDP可靠性传输-QUIC
QUIC的FEC是使用的XOR的方式,即发N + 1个包, 多发一个冗余的包,在正常数据的N个包里面任意一个包丢了,可以通过这个冗 余的包恢复出来,使用异或可以做到切换网络操持连接。尽管QUIC会重传数据包,但是新的数据包的PKN的继续递增的,即之前发送的数据包(PKN=2)和重传的 数据包(PKN=4),虽然数据一样,但包号不同。由于TCP原始包和重传包的序列号是一样的,客户端不知道服 务器返回的 ACK 包到底是原始包的,还是重传包的。除此之外,QUIC的包头经过身份认证,包内数据是加密的。原创 2022-09-06 14:42:45 · 2029 阅读 · 0 评论 -
Posix API 和网络协议栈
当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端TCP就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止(通常为60秒)。在上面提到,TCP有ACK机制,当有报文丢失时,需要从丢失的编号开始重传后面的全部报文(哪怕已有接收,但是发送方不会知道)。原创 2022-09-05 20:16:14 · 739 阅读 · 0 评论 -
Redis+nginx +memcached 网络组件
bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> //代表redis的key/value需要序列化 若是实体类,实体类需要实现序列化。需要jar包common-pool2.jar jedis.jar spring-data-redis.jar。编译nginx cd /home/soft/nginx。默认安装目录 /usr/local/nginx。需要的缓存的类继承该类变可以。原创 2022-09-05 15:54:32 · 125 阅读 · 0 评论 -
C++基于reactor的服务器百万并发如何实现
这篇文章主要介绍“C++基于reactor的百万并发如何实现”,在日常操作中,相信很多人在C++基于reactor的服务器百万并发如何实现问题上存在疑惑,狮查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++基于reactor的服务器百万并发如何实现”的疑惑有所帮助!接下来,请跟着狮一起来学习吧!并发量:一个服务器能同时承载客户端的数量承载:客户端发送给服务器的请求(http或tcp等)在200ms内可以返回正确的结果。原创 2022-09-03 14:07:16 · 421 阅读 · 0 评论 -
Websocket协议的学习、调研和实现
从Websocket草案得知,Websocket是一个全新的、独立的协议,基于TCP协议,与http协议兼容、却不会融入http协议,仅仅作为html5的一部分。以前web server实现推送技术或者即时通讯,用的都是轮询(polling),在特点的时间间隔(比如1秒钟)由浏览器自动发出请求,将服务器的消息主动的拉回来,在这种情况下,我们需要不断的向服务器发送请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。原创 2022-09-02 15:04:21 · 792 阅读 · 0 评论 -
http/https服务器实现
一般发送磁盘数据时,需要将磁盘数据读取到内存中,再发送出去。使用sendfile,原理是使用mmap,内存映射,将文件地址映射到内存中,再调用send,节省空间,零拷贝。拷贝是由cpu使用。到此这篇关于http/https服务器实现的文章就介绍到这了,更多相关内容请搜索开发狮以前的文章,希望大家以后多多支持开发狮哦~区别路径还是文件:S_ISDIR(stat_buf.st_mode) S_ISREG(stat_buf.st_mode)解决办法:1.使用分隔符 \r\n\r\n 2.定义包的长度。...原创 2022-09-01 15:52:04 · 225 阅读 · 0 评论 -
C++中的Reactor原理与实现
中心思想是将所有要处理的I/o事件注册到一个中心I/o多路复用器上,同时主线程/进程阻塞在多路复用器上;reactor设计模式是event-driven architecture的一种实现方式,处理多个客户端并发的向服务端请求服务的场景,每种服务在服务端可能由多个方法组成,这篇文章主要介绍了Reactor原理与实现,需要的朋友可以参考下。处理机制为:主程序将事件以及对应事件处理的方法在Reactor上进行注册, 如果相应的事件发生,Reactor将会主动调用事件注册的接口,即 回调函数....原创 2022-08-31 22:15:56 · 1066 阅读 · 0 评论 -
Linux网络编程-网络io与select,poll,epoll
epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它不会复用文件描述符集合来传递结果而迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。若非阻塞,则立即返回,有数据则返回拷贝的数据大小,否则返回错误-1,置错误码为EWOULDBLOCK。...原创 2022-08-30 15:00:28 · 381 阅读 · 0 评论 -
Linux 网络编程-文件和记录锁定-System V IPC
第一个进程读入序号文件输出 1,并准备增值后写回原文件时,第二个进程开始被系统操作调度,它读入“seqno”文件,然后把序号一直修改到 5 后退出,直到此时,第一个进程才重新获得 CPU,它把增值后的 2 写回原文件,继续以下操作,依次输出(这里需要说明的是,为了节省篇幅,我们在程序中只作了 5 次循环。UNIX 的记录指的是从文件的某一相对位置开始的一段连续的字节流,它不同于其它以强制性记录结构阻止文件的操作系统,因此,UNIX 记录锁更恰当的称呼应该是范围锁,它是对文件某个范围的锁定。...原创 2022-08-15 16:16:42 · 301 阅读 · 0 评论 -
Linux 网络编程-进程管道
这样它不仅具有了管道的通信功能,也具有了普通文件的优点(可以同时被多个进程共享,可以长期存在等等),有效的解决了管道通信的缺点。有名管道和管道的操作是相同的,只是要注意,在引用已经存在的有名管道时,首先要用系统中的文件函数来打开它,才能接下来进行其他的操作。注意: fd[0] 用来从管道中读, fd[1] 用来向管道中写数组中的第一个元素(fd[0])是从管道中读出数据的句柄,第二个元素(fd[1])是向管道写入数据的句柄。简单的说,管道就是将一个程序的输出和另外一个程序的输入连接起来的单向通道。.....原创 2022-08-13 14:20:09 · 433 阅读 · 0 评论 -
Linux 网络编程 -进程间通信
网络程序设计中通常包括两个或更多的需要互相对话(interprocess communications ) 的进程,因此进程通信的方法在网络程序设计中是极为重要的。网络程序设计在这个方面不同于一般程序设计通常所使用的方法。一个传统的程序可以通过全局变量或函数调用和不同的模块(甚至同一机器上的其它应用程序)对话,但是在网络上却不行。网络程序设计的一个重要的目标是保证进程间不互相干涉,否则系统可能被挂起或自锁,因此,进程间必须使用简洁有效的方法进行通信,在此方面, Linux 具有非常显著的兼容性。...原创 2022-08-12 17:37:26 · 141 阅读 · 0 评论 -
Linux 网络编程 -UNIX-进程控制
这样,当通过 exec 调用执行该程序时,其进程的有效用户标识符就取自该文件的文件主的有效用户标识符,而不是启动该进程的用户的有效用户标识符。我们用的基本输入例程是 getchar,它实际上是标准 I/O 库中的一个宏(macro),它从程序的标准输入读入一个字符,userin 把每个读入的字符都存入字符型数组 inpbuf 中,当它结束时,userin 就返回读入字符的个数或 EOF(表示文件结尾)。exit()除了停止进程的运行外,它还有一些其它作用,其中最重要的是,它将关闭所有已打开的文件。...原创 2022-08-11 16:01:06 · 509 阅读 · 0 评论 -
3.1 进程的建立与运行
目录3.1.1 进程的概念3.1.2 进程的建立3.1.3 进程的运行3.1.4 数据和文件描述符的继承原创 2022-08-10 16:31:24 · 306 阅读 · 0 评论 -
Linux网络编程-UNIX/Linux 模型
UNIX 的文件系统有如下的特点:*层次结构*对文件数据的一致对待*建立与删除文件的能力*文件的动态增长*文件数据的权限保护* 把外围设备作为文件看待文件系统被组织成树状,称为目录树。目录树有一个成为根(root)的节点(记做“/”)。文件系统结构中的每个非树节点都是文件的一个目录(directory),树的叶节点上的文件既可以是目录,也可以是正规文件(regular files),还可以是特殊设备文件(special device files)。...原创 2022-08-09 20:41:21 · 343 阅读 · 0 评论