低成本服务解决方案

简介:

    做服务无非就那几步,启动端口监听、接收请求数据、分配资源受理,反馈应答数据,关闭释放资源。一个优秀的服务端实现要考虑并发处理和对共享资源控制还是要费点心思的。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协议,可以节省大量服务框架代码的开发工作量;

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

    今晚有雨出门带伞~

相关文章
|
2天前
|
存储 运维 监控
日志服务SLS焕新升级:卓越性能、高效成本、极致稳定与智能化
日志服务SLS焕新升级,涵盖卓越性能、高效成本、极致稳定与智能化。新功能特性包括Project回收站、ELasticsearch兼容方案及全链路数据处理能力提升。通过扫描计算模式和数据加工优化,实现更好的成本效果。案例分析展示了一家国内顶级车企如何通过日志服务实现跨云、跨地域的全链路数据处理,大幅提升问题处理效率。
|
8月前
|
监控 安全 Cloud Native
云计算架构设计与实施:构建高效、可扩展的云解决方案
【4月更文挑战第30天】本文探讨了云计算架构的关键要素,包括服务模型(IaaS, PaaS, SaaS)、部署模型(公有云、私有云、混合云)及可扩展性、安全性、可靠性和成本效益。实施策略涉及需求分析、选择云服务商、设计基础设施、自动化、监控和灾备计划。最佳实践推荐模块化设计、微服务、DevOps、CI/CD、多租户支持和云原生应用,以确保高效、安全且成本优化的云环境。
|
8月前
|
存储 人工智能 运维
【云原生企业级数据湖:打破数据孤岛,优化存储成本】
【云原生企业级数据湖:打破数据孤岛,优化存储成本】 随着大数据时代的到来,企业对于数据的处理和存储需求日益增长。如何有效地存储和管理大量数据,同时降低运维成本,成为了企业面临的一大挑战。盛通教育的云原生企业级数据湖方案,正是为了解决这一问题而设计的。
227 1
|
存储 Cloud Native 大数据
浅谈传统企业的大数据平台如何上云
浅谈传统企业的大数据平台如何上云
|
SQL 运维 Oracle
云上“升舱”,升级到速度更快,功能更全面,性价比更高的数仓平台
阿里云AnalyticDB“升舱”活动致力于帮助您将线下或自建的数仓全面迁移至云原生架构之上,享受全托管的使用体验;为企业构建数据平台带来速度更快,功能更全面,性价比更高的数据平台
云上“升舱”,升级到速度更快,功能更全面,性价比更高的数仓平台
|
消息中间件 机器学习/深度学习 弹性计算
阿里云高庆瑞:如何快速搭建低成本高弹性的云上应用
通过弹性伸缩,保证业务稳定性,同时降低成本
阿里云高庆瑞:如何快速搭建低成本高弹性的云上应用
|
存储 NoSQL Cloud Native
阿里云:加大NoSQL数据库软硬件一体化技术自研
8月25日,在天池平台与阿里云数据库事业部联合主办的阿里云NoSQL数据库峰会上,阿里云公布NoSQL数据库自研2.0计划,进一步加大软硬件一体化技术体系的自研力度,通过聚焦软硬协同、多模融合、云原生三大方向,提升云原生内存数据库Tair、云原生多模数据库Lindorm等NoSQL数据库产品核心竞争力。
740 0
阿里云:加大NoSQL数据库软硬件一体化技术自研
|
消息中间件 机器学习/深度学习 弹性计算
云上高弹性,低成本的解决方案|学习笔记
快速学习 云上高弹性,低成本的解决方案
271 0
云上高弹性,低成本的解决方案|学习笔记
|
存储 数据采集 人工智能
灵活架构与超高性价比,数据湖解决方案助力AI技术实现落地应用
阿里云针对AI行业的痛点,推出了AI行业的数据湖解决方案,该解决方案的核心是通过数据湖一体化的能力,轻松对接各种计算与处理引擎,直接在数据湖中对数据进行分析。
9758 0
灵活架构与超高性价比,数据湖解决方案助力AI技术实现落地应用
|
运维 Kubernetes Cloud Native
如何为云原生应用带来稳定高效的部署能力?
本文将会介绍在阿里经济体全面接入云原生的过程中,我们在应用部署方面所做的改进优化、实现功能更加完备的增强版 workload、并将其开源到社区,使得现在每一位 Kubernetes 开发者和阿里云上的用户都能很便捷地使用上阿里巴巴内部云原生应用所统一使用的部署发布能力。
如何为云原生应用带来稳定高效的部署能力?