Linux基础——系统整合server与client的一些操作

在TCP连接中,我们会遇到端口复用、粘包问题等。

当server端主动关闭socket,会产生一个TIME_WAIT的状态,所以我们需要加上端口复用的选项,来解决该问题。

由于TCP是个流协议,所以无法提供报文服务,这就需要去处理粘包问题,解决方法有:

  1) 采用固定长度发送数据,这样做的话局限性比较大。

  2) 每次发送报文前,先发送一个4字节的长度信息,然后发送实际报文,这样,对方接收时,先接收4字节的长度信息,然后根据长度信息接收相应的实际报文。

  3) 每条信息使用‘\n‘字符作为结尾,接收方使用readline作为接收函数。

在TCP处理中,close与shutdown的区别:

  1) close基于引用计数,仅当计数为0时,才真正去关闭。

  2) shutdown与引用计数无关。

  3) close同时关闭read和write,shutdown可以指定关闭其中一端。

服务器并发的实现:

  1) 采用循环,每次接受一个新的client,这种称为迭代服务器。

  2) 多进程编写并发,这时,需要处理僵尸信号,处理信号有:

    a) 直接忽略SIGCHLD,这种适合于子进程消亡不需要额外处理的情况。

    b) 为SIGCHLD编写处理函数,内部调用waitpid。

    c) 直接使用waitpid,但是在并发服务器中不能采用这种,因为waitpid需要阻塞,这就把并发服务器降低为迭代服务器。

  3) 多线程编写并发,需要注意的是,将fd传递给线程时,需要使用malloc分配内存空间。

  4) IO复用模型(select、poll、epoll)。

几种IO复用模型的不同:

  1) select的缺点:

    a) fd数目的限制,需要重新编译内核。

    b) fd数组从用户空间copy到内核空间。

    c) select系统调用需要逐个轮询每个fd,随着fd数目的增长,效率下降。

  2) poll模型虽然解决了fd的数目问题,但是仍然存在copy和轮询效率下降的缺陷。

  3) epoll的优点:

    a) 对于fd是直接注册给内核,不存在重复拷贝至内核空间的开销。

    b) 内部采用回调函数,只关注活跃的fd,所以不会随着fd的数目增长而使得效率下降。

具体代码及测试可到我的github上查询:

  https://github.com/gjn135120/my_epoll

时间: 2024-10-26 12:51:27

Linux基础——系统整合server与client的一些操作的相关文章

Linux基础系统权限

Linux基础系统权限 文件权限 Linux中,每个文件拥有三种权限 权限 对文件的影响 对目录的影响 r(读取) 可读取文件 可列出目录内容 w(写入) 可修改文件内容 可在目录中创建删除文件 x(执行) 可以修改文件内容 可访问目录内容 注意: 目录必须拥有x权限,否则无法察看其内容 UGO linux权限基于UGO模型进行控制 U代表User, G代表Group, O代表other 每一个文件的权限基于UGO进行设置 权限三个一组(rwx), 对应UGO分别设置 每个文件都有一个拥有者/用

Linux基础: 系统加载过程和运行级别含义

BIOS 有固化代码指向mbr,mbr指向grub(/boot/grub/下有很多引导配置信息),grub里可以配置多种linux内核vmlinux文件. 启动内核以后就开始加载各种驱动模块并进行系统初始化.系统初始化主要读取/etc/inittab(指定默认运行级别)和/etc/init/下各种配 置文件(指定默认启动服务,终端数目,快捷键……) ,运行完这些系统就启动完毕. 系统运行级别 0-关机 1-单用户 2-不带网络模式的多用户 3-多用户 4-不用 5-图形界面 6-重新启动 在命令

Linux 基础(2)

Linux 基础(二) 用户 组 及权限的相关操作 一.useradd命令选项:–u:指定用户的UID useradd –u 100 mu #指定mu的UID为100–g:指定用户所属的群组 useradd –g mark mu #指定mu的所属群组为mark–d:指定用户的家目录 useradd –d /home/family mu #指定mu家目录为 /home/family–c:指定用户的备注信息 useradd –c "mu_test" mu #mu的备注信息为"mu

linux和windows同步数据 cwrsync client to rsync server

linux和windows同步数据,rsync server  cwrsync client linux server一般系统都自带rsync,如果没有就挂载系统盘自己安装一下,安装挺简单的不用我再多说了vi /etc/rsyncd.confuid = daemon                            //这个用户是系统用户,当rsync客户端连接上服务器后,会映射成这个用户上传或者下载文件gid = daemon                            //组名

【系统知识点】linux基础&优化命令

Xshell上传下载服务器的文件: yum -y install lrzsz sysstat//安装对应软件 sz XXXX//下载 rz XXXX//上传 创建用户: Useradd vrfxie //创建用户 -c comment 指定一段注释性描述. -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录. -g 用户组 指定用户所属的主用户组. -G 用户组,用户组 指定用户所属的附加组. -s Shell文件 指定用户的登录Shell. #可以设置为/sbin

Linux基础回顾(2)——Linux系统分区二三事

问题来自Linux教材,答案自我整理难免会有不足之处.这是我Linux期末的总结 1. 一块硬盘上可以有几种类型的分区?各自可以有多少个?(各个分区能安装操作系统吗?) 硬盘分区有三种类型的分区:主分区,扩展分区,逻辑分区:一个硬盘最多能划分4个主分区,或者3个主分区加上一个扩展分区,扩展分区上可以划分多个逻辑分区(最多20个).能安装操作系统. 2.用户能否在安装过程中创建扩展分区呢? 分区工具在文件系统类型中没有提供扩展(extended)分区类型,即用户不能根据需要不能手工创建扩展分区.安

Linux基础 linux系统中的批量删除文件与空文件删除的命令介绍

Linux基础教程  linux系统中的批量删除文件与空文件删除的命令介绍 Linux资料下面删除文件或者目录命令rm(remove): Linux培训功能说明:删除文件或目录. 语 法:rm [-dfirv][--help][--version][文件或目录...] 补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数"-r",否则预设仅会删除文件. 参 数: -d或--directory 直接把欲删除的目录的硬连接数据删成0,删除该目录. -f或--force 强制删除

浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路中,介绍了Service Manager是如何成为Binder机制的守护进程的.既然作为守护进程,Service Manager的职责当然就是为Server和Client服务了.那么,Server和Client如何获得S

linux基础学习第二十一天之自动化安装linux系统(kickstart)

内容: 利用kickstart进行自动化安装linux系统 制作光盘.U盘启动盘 一.系统自动化安装: 1.anaconda 由前面的学习我们知道,系统的启动流程: bootloader-->kernel(initramfs)-->rootfs-->/sbin/init 所以,bootloader完全可以由光盘来进行引导,在引导的过程中在借助kickstart来进程自动安装 Anaconda是RedHat.CentOS.Fedora等Linux的安装管理程序.它可以提供文本.图形等安装管