摘要:随着物联网、智能电网、智能移动设备的发展,我们将能在任何时候任何地方获取我们所需的信息,本文设计一款基于ARMLinux嵌入式系统的多进程并发服务器。它拥有传统服务器的功能,可远程访问和操作,同时又具有体积小、噪声低、低功耗、低成本的优势,非常适合用于智能楼宇的家用服务器。
目前大家所用的大多是X86服务器,其功能完善、运行速度快、软件支持性好等优点,已被人们普遍认同。但其由于价格昂贵、功耗高、噪声大等原因,一般只应用于工厂、企事业单位,但随着互连网的发展,我们需要更多的小型服务器终端,因此,低成本、低功耗的嵌入式服务器将有极大的应用空间。
面向连接的并发服务器是目前Linux网络服务器的主流形式。它采用主、从服务器的工作方式,能较好地解决了网络中客户进程的并发请求问题。目前在嵌入式领域,基于ARM技术的微处理器应用约占据了32位RISC微处理器80%以上的市场份额,同时,ARM处理器和嵌入式Linux的结合也正变得越来越紧密,在工业控制、消费类电子产品、通信系统、无线系统等各类产品市场都可以看到ARM与Linux相结合的身影。因此,本文介绍了一种基于ARM-Linux嵌入式系统的多进程并发服务器设计。
相互通信的网络程序通常可以分为客户端和服务器端两部分。简单的C/S服务模式客户端和服务器采用的是一对一的关系,而实际上一个客户同时可以与多个服务器通信,一个服务器同时也能与多个客户通信。
Linux下使用TCP套接字编程可以实现基于TCP/IP协议的面向连接的通信,它分为服务器端和客户端两部分,如图1所示。
这样就建立了最简单的C/S连接模式,而所有基于TCP套接字的网络服务也都是建立在这个基础上的。
前面介绍了简单的TCP客户端/服务器概念和连接,其中服务器每次只能处理一个客户的请求,它的实现虽然很简单但效率却很低,在实际应用中,这样的服务器是不能满足实际需求的。
在实际应用中为了让一个服务器同时为多个客户服务,处理多个客户的请求,那么就需要用并发服务器。Linux下主要支持的并发服务器有进程、线程。创建线程要比进程快,但一个进程内的所程共享相同的内存空间、全局变量等信息,所以当一个线程崩溃时,它会影响同一进程中的其他线程。
Linux系统中可以同时存在多个进程,但相对线程来说,进程是的。它拥有的地址空间、执行堆栈、文件描述符等,在未经允许的情况下,一个进程不能访问另一个进程的资源,因此一个进程崩溃不会造成其他进程的崩溃。由于考虑远程系统要求的安全性和稳定性,本系统设计为多进程并发服务器。图2为并发服务器的基本模型图。
在多进程并发服务器中是通过调用fork或vfork函数来创建新进程。当父进程产生新的子进程后,父、子进程共享父进程在调用fork之前的所有描述符。接下来父进程只负责接收客户请求,而子进程只负责处理客户请求。
3)最后父进程关闭已连接描述符,由子进程关闭描述符,这样既可以节省系统资源,又可以防止父、子进程同时对共享描述符进程操作。至此子进程处理与客户的连接,父进程可以对描述符再次调用accept,继续处理下一个客户的请求。
linux中的网络编程通过socket接口实现。socket既是一种特殊的I/O,它也是一种文件描述符。一个完整的socket包括协议、本地地址、本地端口、远程地址、远程端口;每一个socket有一个本地的唯一socket号,由操作系统自动分配。以下是建立TCP socket,其中AF_INET为IPv4,SOCK_STREAM为TCP协议,如建立失败则返回-1。
为了给调用socket0函数产生的套接字分配一个本地协议地址,建立地址与套接字的对应关系,就要用到绑定函数bind0。通过绑定后端口号了地址信息的唯一性。如失败返回-1。
当调用socket0函数创建一个套接字时,默认情况下它是一个主动套接字。所以对于TCP服务器,在绑定操作后,必须要调用listen0函数,将这个未连接的套接字转换。
成被动套接字,使它处在模式下,内核应接受发向该套接字的连接请求。在调用listen0函数后,服务器的状态从close转换到listen状态。Listen第二个状态字代表的是最大连接数,本系统设置的最大连接数为10。
接受客户连接,客户协议地址和长度省略接收,失败accept_fd=-1,置errno。如果建立连接。并且fork0=0,那么程序就进入子进程进行执行。
函数select0是给出每个描述符我们所关心的条件:是否读描述符、是否想写描述符、是否描述符的异常条件。tv指等待时间。FD_ISS ET()测试该集中的一个给定位是否有变化、更新。
调用read0可以接收buffer数据缓冲区,1 024指接收数据缓冲区大小,n为接收字节数。
调用子程序modbus.c,执行相应操作,调用make_modbus_ack0生成回发数据,并通过send0回发给客户端。
Makefile的作用就是让编译器知道要编译一个文件需要依赖哪些文件,同时当那些依赖文件更新时,编译器会自动发现最终生成的文件已经过时,而重新编译相应模块。Makefile定义了一系列规则来指定各文件,如依赖性、先后顺序及是否需要更新等。
编译译基于ARM的modbus网络程序如下图,首先我们看到文件夹里没有可执行文件arm-modbus-server,输入:#make
本文详细介绍了并发服务器的原理结构,分析了基于linux下的并发服务器程序代码,并且移植到ARM平台上运行,实现了小型嵌入式服务器的制作。这种低成本、低噪声、低功耗、高稳定性、高安全性的嵌入式服务器,将在我们信息化发展中的智能楼宇、智能家电、智能移动设备中获得应用。
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、度的宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加,对信息安全界的动态新闻更新更快。
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的途径。
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
本文由 790游戏(www.790.kim)整理发布