您的位置 首页 开关

根据ARM-Linux嵌入式体系的多进程并发服务器规划

基于ARM-Linux嵌入式系统的多进程并发服务器设计,摘要:随着物联网、智能电网、智能移动设备的发展,我们将能在任何时候任何地方获取我们所需的信息,本文设计一款基于ARM-Linux嵌入式系统的多进

摘要:跟着物联网、智能电网、智能移动设备的开展,咱们将能在任何时候任何地方获取咱们所需的信息,本文规划一款根据ARM-Linux嵌入式体系多进程并发服务器。它具有传统服务器的功用,可长途拜访和操作,一起又具有体积小、噪声低、低功耗、低成本的优势,十分合适用于智能楼宇的家用服务器。

现在咱们所用的大多是X86服务器,其功用完善、运转速度快、软件支撑性好等长处,已被人们遍及认同。但其因为价格昂贵、功耗高、噪声大等原因,一般只运用于工厂、企事业单位,但跟着互连网的开展,咱们需求更多的小型服务器终端,因而,低成本、低功耗的嵌入式服务器将有极大的运用空间。

面向衔接的并发服务器是现在Linux网络服务器的干流方式。它选用主、从服务器的工作方式,能较好地处理了网络中客户进程的并发恳求问题。现在在嵌入式范畴,根据ARM技能的微处理器运用约占有了32位RISC微处理器80%以上的商场份额,一起,ARM处理器和嵌入式Linux的结合也正变得越来越严密,在工业操控、消费类电子产品、通讯体系、无线体系等各类产品商场都能够看到ARM与Linux相结合的身影。因而,本文介绍了一种根据ARM-Linux嵌入式体系多进程并发服务器规划。

1 并发服务器原理及结构

1. 1 根本的C/S服务模型

彼此通讯的网络程序一般能够分为客户端和服务器端两部分。简略的C/S服务形式客户端和服务器选用的是1对1的联系,而实践上一个客户一起能够与多个服务器通讯,一个服务器一起也能与多个客户通讯。

Linux下运用TCP套接字编程能够完成根据TCP/IP协议的面向衔接的通讯,它分为服务器端和客户端两部分,如图1所示。

根据ARM-Linux嵌入式体系的多进程并发服务器规划

服务器端与客户端衔接的过程如下:

1)运用socket0函数创立套接字;

2)将创那的套接字绑定到指定的地址结构

3)Listen0函数设置套接字为监听形式,使服务器进入被迫翻开的状况

4)承受客户端的衔接恳求,树立衔接

5)停止衔接

客户端完成过程:

1)运用socket0函数创立套接字

2)调用connect0函数树立一个TCP服务器的衔接

3)发送数据恳求,接纳服务器的数据应对

4)停止衔接

这样就树立了最简略的C/S衔接形式,而一切根据TCP套接字的网络服务也都是树立在这个基础上的。

1.2 多进程并发服务器模型

前面介绍了简略的TCP客户端/服务器概念和衔接,其间服务器每次只能处理一个客户的恳求,它的完成尽管很简略但功率却很低,在实践运用中,这样的服务器是不能满意实践需求的。

在实践运用中为了让一个服务器一起为多个客户服务,处理多个客户的恳求,那么就需求用并发服务器。Linux下首要支撑的并发服务器有进程、线程。创立线程要比进程快,但一个进程内的一切线程同享相同的内存空间、全局变量等信息,所以当一个线程溃散时,它会影响同一进程中的其他线程。

Linux体系中能够一起存在多个进程,但相对线程来说,进程是独立的。它具有独立的地址空间、履行仓库、文件描述符等,在未经答应的情况下,一个进程不能拜访另一个进程的资源,因而一个进程溃散不会形成其他进程的溃散。因为考虑长途监控体系要求的安全性和稳定性,本体系规划为多进程并发服务器。图2为并发服务器的根本模型图。

根据ARM-Linux嵌入式体系的多进程并发服务器规划

1.3 多进程服务器原理

在多进程并发服务器中是经过调用fork或vfork函数来创立新进程。当父进程发生新的子进程后,父、子进程同享父进程在调用fork之前的一切描述符。接下来父进程只担任接纳客户恳求,而子进程只担任处理客户恳求。

图3阐明父进程调用fork生成子进程后,父、子进程对客户恳求和描述符的操作过程。

根据ARM-Linux嵌入式体系的多进程并发服务器规划

1)当服务器调用accept0函数时,衔接恳求从客户抵达服务器时两边状况。

2)当客户的恳求被承受后。接下来服务器就会调用fork函数生成子进程。

3)最后父进程封闭已衔接描述符,由子进程封闭监听描述符,这样既能够节约体系资源,又能够避免父、子进程一起对同享描述符进程操作。至此子进程处理与客户的衔接,父进程能够对监听描述符再次调用accept,持续处理下一个客户的恳求。

2 功用代码剖析

网络主程序规划其实首要也便是父进程所履行的程序,程序规划的流程图如4所示。

根据ARM-Linux嵌入式体系的多进程并发服务器规划

linux中的网络编程经过socket接口完成。socket既是一种特别的I/O,它也是一种文件描述符。一个完好的socket包含协议、本地地址、本地端口、长途地址、长途端口;每一个socket有一个本地的仅有socket号,由操作体系主动分配。以下是树立TCP socket,其间AF_INET为IPv4,SOCK_STREAM为TCP协议,如树立失利则回来-1。

listen_fd=socket(AF_INET,SOCK_STREAM,0)

调用bzero初始化套接字地址结构,并对地址结构中的成员赋值,代码如下。

bzero(client_addr,sizeof(struct sockaddr_in));

client_addr.sin_family=AF_INET;

client_addr.sin_port=htons(MY_PORT);

client_addr.sin_addr.s_addr=htonl(INADDR_ANY);

为了给调用socket0函数发生的套接字分配一个本地协议地址,树立地址与套接字的对应联系,就要用到绑定函数bind0。经过绑定后端标语确保了地址信息的仅有性。如失利回来-1。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/322044.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部