低成本服务解决方案

简介:

    做服务无非就那几步,启动端口监听、接收请求数据、分配资源受理,反馈应答数据,关闭释放资源。一个优秀的服务端实现要考虑并发处理和对共享资源控制还是要费点心思的。Linux下提供了一个基于xinetd服务的低成本小制作解决方案,用起来超方便,优缺点放最后总结欢迎点评。

0001:	/****************************************/
0002:	/*	Author:	gong_libin		*/
0003:	/*	Date:	2000_01_01		*/
0004:	/*	File:	GDeamon.c		*/
0005:	/****************************************/
0006:	
0007:	/**
0008:	 * /etc/xinetd.d/GDeamon
0009:	 * service GDeamon
0010:	 * {
0011:	 * 	flags		= REUSE
0012:	 * 	socket_type	= stream
0013:	 * 	wait		= no
0014:	 * 	user		= root
0015:	 * 	server		= /usr/bin/GDeamon
0016:	 * 	log_on_failure	+= USERID
0017:	 * 	disable		= no
0018:	 * }
0019:	 *
0020:	 * /etc/services
0021:	 * GDeamon	321/tcp	# The GDeamon Protocol
0022:	*/
0023:	
0024:	#include <stdio.h>
0025:	#include <stdlib.h>
0026:	#include <string.h>
0027:	#include <unistd.h>
0028:	#include <fcntl.h>
0029:	#include <time.h>
0030:	
0031:	#define	G_STDIN			stdin
0032:	#define	G_STDOUT		stdout
0033:	#define	G_STDERR		stderr
0034:	
0035:	#define	G_TIMOUT		10
0036:	#define	G_PACKET		1024
0037:	#define	G_RESULT		G_PACKET * G_PACKET
0038:	
0039:	int main(int argc, char* argv[])
0040:	{
0041:		FILE* pstPipe = NULL;
0042:		time_t ulTime = time(NULL);
0043:		char szPacket[G_PACKET] = {0};
0044:		char szResult[G_RESULT] = {0};
0045:		int iCount = 0, iTotal = 0, iLength = 0;
0046:	
0047:		close(fileno(G_STDERR));
0048:		fcntl(fileno(G_STDIN), F_SETFL, O_NONBLOCK);
0049:	
0050:		if (fread(&iLength, sizeof(int), 1, G_STDIN) > 0) {
0051:			while (iTotal < iLength) {
0052:				if (time(NULL) - ulTime > G_TIMOUT) {
0053:					printf("数据接收超时");
0054:					break;
0055:				}
0056:				if ((iCount = fread(&szPacket[iTotal], sizeof(char), G_PACKET - iTotal, G_STDIN)) > 0) {
0057:					iTotal += iCount;
0058:				}
0059:			}
0060:			if (iLength == strlen(szPacket)) {
0061:				if (NULL != (pstPipe = popen(szPacket, "r"))) {
0062:					if (NULL != fgets(szResult, G_PACKET, pstPipe)) {
0063:						printf("%s", szResult);
0064:					}
0065:					pclose(pstPipe);
0066:				}
0067:				else {
0068:					printf("命令执行失败");
0069:				}
0070:			}
0071:			else {
0072:				printf("数据长度错误");
0073:			}
0074:		}
0075:	
0076:		return 0;
0077:	}

    009-018定义配置文件/etc/xinetd.d/Gdeamon,通知系统允许端口复用、传输层是TCP协议、不等待进程终止、进程归属root用户、执行程序存放路径等信息。

    021行追加到/etc/services文件中,通知系统传输层协议类型和监听端口及服务名称。

    047行关闭错误输出免得添乱,48行设置标准输入为非阻塞模式。

    050行从标准输入读取一个整形,在这个用例中这个整形用于表示后面数据的长度。

    051-059行根据上面整形值循环读取数据直到读取完毕或超时为止。

    060行判断读取数据的完整性。

    061-069把用户发送过来的指令提交系统执行并通过管道获取执行结果。

    063行把执行结果通过标准输出返回。

    完事了就这么简单省心省力满足并发处理资源回收完全不操心,监听端口监听到连接的时候会fork子进程,同时把子连接的套接字传下去,并把读写操作重定向到标准输入输出上,真欣赏这种简单粗暴而又行之有效的做法。用例仅供参考,至于通信协议和异常机制没做过多处理,需要自己加吧。

    优点:开发便利快捷,重点可放在业务流的上,处理并发量不大逻辑不复杂的接口半天时间连调带测足够;不仅支持tcp协议也支持udp协议,可以节省大量服务框架代码的开发工作量;

    缺点:并发量一大力不从心,响应不够快速高效,在线调测不够方便;

    今晚有雨出门带伞~

相关文章
|
3月前
|
存储 安全 文件存储
阿里云云存储:数字时代的数据保障与创新
在信息爆炸的数字时代,数据已经成为个人和企业不可或缺的重要资产。而如何高效、安全地存储和管理这些数据,成为各行各业共同关注的核心问题。阿里云作为全球领先的云计算服务提供商之一,其云存储服务不仅提供了强大的存储能力,还融合了多种创新技术和安全措施,满足了不同规模的企业需求。
223 0
|
存储 弹性计算 运维
如何利用阿里云实现高效低成本灾备演练?
如何利用阿里云实现高效低成本灾备演练?
如何利用阿里云实现高效低成本灾备演练?
|
消息中间件 机器学习/深度学习 弹性计算
阿里云高庆瑞:如何快速搭建低成本高弹性的云上应用
通过弹性伸缩,保证业务稳定性,同时降低成本
阿里云高庆瑞:如何快速搭建低成本高弹性的云上应用
|
存储 容灾 安全
如何利用工具低成本构建阿里云灾备方案?
如何利用工具低成本构建阿里云灾备方案?
如何利用工具低成本构建阿里云灾备方案?
|
消息中间件 机器学习/深度学习 弹性计算
云上高弹性,低成本的解决方案|学习笔记
快速学习 云上高弹性,低成本的解决方案
267 0
云上高弹性,低成本的解决方案|学习笔记
|
存储 缓存 运维
云上应用系统数据存储架构演进
前言回顾过去二十年的技术发展,整个应用形态和技术架构发生了很大的升级换代,而任何技术的发展都与几个重要的变量相关。一,应用形态的变迁,产生更多的场景和需求。整个应用形态从企业应用、互联网服务再到移动应用,历经了几个不同阶段的发展。从最早企业内应用系统,到通过移动互联网技术覆盖到每个人生活的方方面面,这个过程中产生了大量的场景和需求。而新的场景和需求,是推动产品和技术发展的主要因素。二,更复杂的场景
1176 0
云上应用系统数据存储架构演进
|
存储 数据采集 人工智能
灵活架构与超高性价比,数据湖解决方案助力AI技术实现落地应用
阿里云针对AI行业的痛点,推出了AI行业的数据湖解决方案,该解决方案的核心是通过数据湖一体化的能力,轻松对接各种计算与处理引擎,直接在数据湖中对数据进行分析。
9751 0
灵活架构与超高性价比,数据湖解决方案助力AI技术实现落地应用
|
存储 人工智能 前端开发
企业数据创新之旅——高性能NAS助力业务上云
在2018年云栖大会·南京峰会的飞天技术汇专场中,阿里云产品专家王登宇带来了题为《企业数据创新之旅——高性能NAS助力业务上云》的精彩技术分享。在分享中,他首先介绍了企业上云面临的困难和阿里云存储之路;随后对NAS文件存储产品家族的技术架构和适用场景进行了分析;分享最后,他结合基因、视频、AI等具体客户对NAS助力业务上云进行了详细讲解。
9461 0
|
存储 传感器 边缘计算
如何为智慧城市打造低成本的数据存储基础架构?
支撑智慧城市的数据存储网络的价格可能过高,但是自动化存储技术与合理的计划和设计相结合,可以帮助克服这一挑战。
|
数据采集 安全 网络安全
揭秘政企安全加速解决方案的架构与应用场景实践
5月20日,阿里云政企安全加速解决方案正式发布。该解决方案是阿里云CDN联合云安全, 一同打造的分发加速+安全一站式服务,旨在帮助政府、金融、传媒、传统企业顺利开展线上业务, 有效解决内容分发链路上安全和加速性能的问题。
1260 0