精华内容
下载资源
问答
  •  熟悉服务器软件开发的开发人员都知道使用Producer-Consumer模型加上线程池隔离消息的接收和消息的处理,但到消息的具体处理时一般是构建一个实例状态和消息类型的二维矩阵,矩阵的内容是函数指针。本文默认认为你...

    1. C语言实现服务器软件时的常用编程模型

        熟悉服务器软件开发的开发人员都知道使用Producer-Consumer模型加上线程池隔离消息的接收和消息的处理,但到消息的具体处理时一般是构建一个实例状态和消息类型的二维矩阵,矩阵的内容是函数指针。本文默认认为你熟悉State Design Pattern,主要介绍用State Design Pattern来替换这个方法。


    2. State模式的应用

    使用State设计模式可以将所有的消息的处理放到具体的State对象中,这样将实例状态这个维度分解为不同的消息对象,而将消息类型这个维度封装到具体的State对象中,就可以使用面向对象的思想来实现服务器软件。


    3. State模式的增强

    a.  一般在设计状态对象的时候,状态对象里面不放任何属性,完全把状态对象做成一个方法的集合。

    b. 如果a成立的话,可以进一步把每个状态对象作为Singleton和Immutable来实现。

    采用以上方法的好处是,整个系统中所有的session就可以共享这些状态对象,避免了需要不停的创建和销毁状态对象,极大的提升性能。


    4. 关于Servlet Container实现的思考

    a. 其实我们考虑HttpServlet的实现,其实我们自己在写HttpServlet的时候最好不要增加字段,否则就会出现同步的问题。

    b. 虽然HttpServlet没有使用Singleton模式,但是一般的Servlet Container只会创建一个HttpServlet。

    c. HttpServlet就是就是一个方法的集合,有doGet, doPost, doMethod...

    d. XML其实就是就应和了State这个维度

    综合以上思考,其实Servlet Container实现就是应用了State设计模式

    展开全文
  • 高性能服务器软件开发

    千次阅读 2003-11-29 23:06:00
    这是正在写的一本书的大纲,先发出来,大家提点意见 高性能服务器软件开发 关于这本书的简单介绍:注意,在这里我们讨论的高性能服务器软件设计并不是通常意义上的高性能Web程序设计,比如说在J2EE、.NET框架下...
    
    

    这是正在写的一本书的大纲,先发出来,大家提点意见<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

     

    高性能服务器软件开发

     

    关于这本书的简单介绍:

    注意,在这里我们讨论的高性能服务器软件设计并不是通常意义上的高性能Web程序设计,比如说在J2EE.NET框架下如何使用线程池提高性能,如何优化ASPPHP程序,或者如何调整ApacheIISWeb服务器以获得更好的性能等等。

    这里讨论的是真正高性能的从硬件到操作系统底层,然后到IO模型、应用模型的服务器设计,当然,作为一家之言,里面同样充满了误解、偏见和无知,但是在指责我之前,请仔细思考你指责的理由,进行仔细的测试之后把你的完整意见告诉我,我会很感谢这种建设性的指责而不是其他。

     

    我们面临的问题

     

    目前已经存在,而且将会越来越多的大量网络应用,它们包括:

    即时聊天服务器

    FTP服务器

    基于互联网的媒体应用

    大型购物网站

    大型门户网站

    在线网络游戏

     

    而在实际使用的时候,我们经常碰到下面的情况:

    连接数过多,网站无法访问。

    无法下载文件,或者下载速度非常缓慢

    同时连接的数量受到很大限制。

    站点非常脆弱,经常受到这样那样的攻击而瘫痪。

     

    对于这些情况,通常的解决方案是:

    增加硬件的性能

    使用服务器集群和负载均衡技术

    更大的带宽

     

    这些真的需要吗?

    我们有没有仔细的思考我们的硬件本身的限制,操作系统的限制,我们的应用程序的限制,真正的瓶颈在哪里?

     

    让我们首先来看一看基本的c/s网络应用。

     

    基本的客户/服务器网络应用系统:

     

    第一类  非基于连接的系统

    电子邮件,百万级的,使用的频率有限,同时访问的用户有限,连接的数量受到限制

    即时聊天、视频或者其他在线媒体

    这些系统有自己的功能限制。

     

    基于连接的静态系统

    ftp下载

    http访问

     

    基于连接的动态系统

    包括动态页面的Web 站点,动态的内容和用户无关

    包括用户的概念以及用户相关数据的系统,经常有一个后台数据库。

    包括业务逻辑的系统,例如电子购物站点,信息港,以及最近流行的在线游戏。

     

    根本的问题是什么

     

    如何以尽可能少的CPU 时间,内存占用,支持更多的网络连接,发送/接收更多的数据。

     

    从下往上系统的根本构造包括:

    1.         硬件设施:包括CPU 的计算能力,硬盘、总线的带宽,网络设施的吞吐能力。

    2.         操作系统:操作系统对并发连接的支持和开销,操作系统的IO开销

    3.         网络应用模型:基本的网络IO模型,事件通知的机制

    4.         应用模型:结合实际应用的应用系统设计

    5.         编码和实现:好的编码和差的实现之间的差别是非常巨大的,在这里我提出一些可能有偏见或者偏激的看法。

     

    1,2硬件设施和操作系统的开销比较。

     

    我们将1,2结合起来进行比较:

     

    选择下面一些基本的硬件平台:

    典型的笔记本电脑,P4M平台,100M网卡,512M内存

    典型的台式机,P4平台,100M网卡,512内存

    典型的服务器,xeon平台,千兆网卡,1G内存

    典型的AMD64位服务器,千兆网卡,1G内存

     

    软件系统包括:

    Windows系统:

    Windows2000 Profession

    Windows2000 Advance Server

     

    自由的Unix类系统:

    Linux 2.4内核

    Linux 2.6内核

    FreeBSD5.1内核

     

    主要的性能评估包括:

     

    影响服务器性能的操作系统的基本调用评估

    l         分配/释放内存的开销

    l         创建/中止线程/进程的开销

    l         互斥锁的开销(上下文切换的开销)

    l         内存映像文件的创建/读写开销

     

    操作系统网络性能的基本评估

    l         套接字的创建/释放开销

    l         套接字的绑定开销

    l         建立网络连接的开销

    l         发送数据/接收数据的吞吐量

    l         一次标准HTTP请求/响应的延时和开销。

     

    初步的结果表明,硬件方面,Xeon系统显然超过了通常的笔记本和台式机,而AMD 64位系统在较低的主频下有非常好的性能表现(我们仍然使用32位软件进行测试)。而操作系统方面,所有的类Unix系统都全面超过Windows平台,而Linux2.6内核是各个平台中表现最好的。

     

    网络IO模型的设计和评估:

     

    基本概念,操作系统采用何种方式通知应用软件应该去某一个套接字上获取数据或者发送数据。

     

    最简单的办法,采用轮询的机制循环检查套接字的状态,在很多时候,这种方式的效率反而最高。

    轮询方式具体的应用范围:

     

    其次,使用每个连接一个线程的方式,这种方式可行性决定于

    操作系统可以使用线程的数量

    操作系统线程创建和线程间切换的开销。(初步的测试表明,linux2.6内核每秒可以创建5000以上的线程)

     

    两种基本的消息触发方式:

    条件触发和边沿触发

    常见的select就是条件触发。

     

    Window平台:

    包括常见的Select模型

    event select模型

    IO完成端口模型,实际上就是一种边沿触发的机制。

     

    Linux平台

    基本的select模型,最大的问题在于寻找哪一个socket上面发生的事件(socket的本质是文件句柄,所以数量巨大)

    边沿触发: 

       2.4内核推荐的实时信号模型

       2.6内核推荐的epoll模型

     

    FreeBSD

    基本的select模型

    边沿触发的kqueue模型

     

    性能评估:

    基本的测试表明,在同时并发连接数量,每个连接的延时和吞吐量上,Linux 2.6内核都是胜利者,其性能显著超过了2.4内核以及FreeBSD。所有的类Unix系统都将Windows系统远远抛在后面。在各种IO模型的比较下, linux2.6内核的epoll同样成为胜利者,而IO完成端口仍然是最后一名,显然,对易用性和图形性能的要求使得Windows并不适合作为一个服务器端的操作系统。

     

    应用系统的模型:

     

    基本的Web服务器:

     

    1静态页面的提供:

    内存映像文件

    直接文件发送,减少了文件的数据从核心拷贝到应用层然后再拷贝到核心的开销

    WindowsLinux环境下都有相应的系统调用。

    核心服务器,直接在核心完成基本的HTTP服务:

    khttpd

     

    2动态内容的提供:

    基本的硬编码方式提供动态页面

    使用简单的应用程序密切相关的脚本语言,

    使用通用的脚本语言:

    高性能的LUA

    高性能但是过于庞大的Java

    其它脚本语言PHP,ASP等等。

     

    3 数据库系统

    本地存储还是通过网络访问数据库服务器?

    OracleSybaseSQL Server和其他的数据库服务器

    mySQLmSQLPostgresopen source数据库服务器

     

    本地:

    Berkely DB

    如果不需要复杂的事务处理和恢复功能,可以使用简单高性能的,基本B *Tree存储机制。

     

    4 J2EE.NET框架,复杂性的好处和代价。

     

     

    其他应用服务器:

    数据库应用

    在线游戏

    流媒体播放,RTP和其他并不广为人知的协议

     

    下一代应用?P2PBT

    新的思路,带来的好处,当然也会由此带来新的问题:

    可能对整个互联网带宽和流量的影响

    可能带来的法律问题

     

    下面该看看应用系统了,好的设计同样是非常重要的:

    真正高性能的程序设计

     

    more small, more fast

    more simple, more fast

    更小的代码更快

    更简单的代码更快

     

    现代计算机的体系,速度往往取决于CPU cache 的命中情况。

    因此,更小、更简单的代码往往会获得更好的性能。

     

    l         删除冗余代码,和一般理解相反,放在那里不动的代码即使没有使用也会影响系统的性能。

    l         不要低估或者高估编译器的优化,除了代码本身所能提供的信息以外,编译器永远不知道你到底要做什么。

    l         不要梦想复用,在代码级重复使用你代码的可能性接近于0

    l         层层的封装是效率的杀手

    l         动态运行时解析,类型….带来的问题远远大于所承诺的好处。

    l         专用、专用再专用,把你的代码限制在一个非常具体的场景中,通用的代码往往意味着低效、潜在的误用和其他错误。

    l         不要做期待之外的事情,所有的bonus都是要付出代价的!

    l         优化最常见的情况,而不是最糟糕的情况。

    l         内存分配和释放是非常昂贵的操作(从时间上,稳定性上都是)

    l         不要想象,使用工具观察你的代码,vTune或者gProf等等,只有这样才能发现真正的瓶颈所在。

     

     

    展开全文
  • 常用服务器软件

    万次阅读 2018-10-03 16:32:41
    服务器软件 开发机构 简述   Nginx 俄罗斯(开源) Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD...

     

    服务器软件

    开发机构

    简述

     

    Nginx

    俄罗斯(开源)

    Nginx是一款轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东新浪网易腾讯淘宝等。

     

    apache

    Apache软件基金会

    Apacheweb服务器软件拥有以下特性:

    Apache Server配置界面

    1.支持最新的HTTP/1.1通信协议

    2.拥有简单而强有力的基于文件的配置过程

    3.支持通用网关接口

    4.支持基于IP和基于域名的虚拟主机

    5.支持多种方式的HTTP认证

    6.集成Perl处理模块

    7.集成代理服务器模块

    8.支持实时监视服务器状态和定制服务器日志

    9.支持服务器端包含指令(SSI)

    10.支持安全Socket层(SSL)

    11.提供用户会话过程的跟踪

    12.支持FastCGI

    13.通过第三方模块可以支持JavaServlets

     

    tomcat

    Apache软件基金会

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

     

    Resin(开原版和非开源版)

    CAUCHO公司

    是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的。

     

     

    展开全文
  • 一、软件开发生命周期定义 软件的生命周期,是指软件从设计开发到上线运营再到停止使用的完整过程,分为“三个时期八个阶段”,分别为: 可行性研究阶段 | 需求分析阶段 ----&gt; 软件定义期 概要设计阶段 ...

    一、软件开发生命周期定义

    软件的生命周期,是指软件从设计开发到上线运营再到停止使用的完整过程,分为“三个时期八个阶段”,分别为:

    可行性研究阶段 | 需求分析阶段   ---->  软件定义期

    概要设计阶段 | 详细设计阶段 | 开发实现阶段 | 项目测试阶段  ---->  软件开发期

    部署阶段 | 维护阶段  ---->  软件维护期

    二、软件开发生命周期详细介绍:

    1.软件定义期

    (1)可行性研究阶段  -->  《可行性研究报告》、《项目开发计划》

    分析软件各方面的可行性(IF CAN DO),例如:技术(选择一个可以实现该功能的技术)、人员、资金、时间、设备、政策法规、风俗、回报率等。

    (2) 需求分析阶段  -->  《需求分析报告》

    分析软件需要实现的功能和需要具备的性能(WHAT TO DO),例如:软件必须完成的主要/次要功能点,软件的安全性、可靠性、精度等性能需求。

    2.软件开发期

    (3) 概要设计阶段 -->  《概要设计说明》

    从总体上对项目进行设计(HOW TO DO 1.0),例如:技术选型(软件、硬件、网络)、功能模块划分、数据结构设计、制定开发和测试计划。

    (4) 详细设计阶段 --> 《详细设计说明》

    在概要设计的基础上,由各模块负责人拟定可供实施的开发指导(HOW TO DO 2.0),主要需要完成:模块的输入输出、模块内部的数据结构、模块内部的处理算法、模块内部的状态转换过程。

    (5) 开发实现阶段 --> 《开发进度报告》...

    由前后端工程师协同完成项目各部分的编码工作,例如:UI/UE设计师、前端工程师、后台工程师

    (6)项目测试阶段

    在软件开发完毕之后,制定详细的测试计划并严格按照测试计划对软件进行错误检查,主要分为三个阶段:单元测试、组装测试及系统测试。测试方法主要有白盒测试和黑盒测试两种。

    3.软件维护期

    (7)部署阶段

    软件开发完毕并完成严格且详细的测试之后,需要从开发模式(development mode)部署到用户的生产环境即生产模式(production mode)之下。

    (8) 维护阶段

    这一阶段是软件开发周期中持续时间最长的一个阶段,主要分为纠错性维护和改进性维护。

    三、服务器概述

    1.什么是服务器?

    简单的来说,服务器就是网络环境中的高性能计算机,它响应客户端的各种请求,并为其提供相应的各种服务。设计模式分为C/S模型和B/S模型。

    2.硬件服务器

    指提供计算服务的设备,和普通计算机类似,具有CPU、内存、系统总栈、硬盘等。由于其需响应大量请求并提供服务,在安全性可靠性上也有一定要求,所以与通用计算机相比,其各方面性能要求较高。按照大小可以分为工作站、小型机、中型机、大型机和超级计算机等。

    3.软件服务器

    主要指服务器应用程序,它负责监听特定端口,并接收客户端的请求。通常将其按照提供服务的不同主要分为:DNS服务器(把域名解析为计算机的IP地址)、Web服务器,数据库服务器,FTP服务器,域名服务器等等。

    4.如何访问服务器?

    访问网络上任一台服务器,必须提供以下三个信息:

    (1)访问协议:规定两者之间沟通的语言,如TCP/IP、FTP等

    (2)主机地址:服务器的域名或IP地址

    (3)端口号:一台计算机上采用不同端口提供不同服务,所以需要告知所需服务采用的端口号。

    附:阿里面试题

    Question:在浏览器地址栏中输入:www.taobao.com回车后,直到页面上出现淘宝页面,这之间的过程是怎样的?

          

    展开全文
  • OPC SERVER 服务器开发,为组态软件提供驱动接入,定制计算机测控软件,远程控制系统(工业控制器) 从事电气自动化控制系统集成多年,通信网络精通,熟悉串行通信设备,以太网通信设备,现场总线设备,编写过多套成熟...
  • 快速开发搭建Web服务器软件

    千次阅读 2013-01-08 15:06:27
    搭建网站或者博客,需要一个合适的 Web 服务器。除了如下能在购买的虚拟空间上进行操作外,我们也可以在自己的电脑上搞定,因为可以用来方便快捷地测试网站或者博客主题,无论是 Wordpress、Joomla,还是 eShop 等等...
  • live555开发的流媒体服务器软件

    千次阅读 2011-02-24 13:59:00
    http://www.cnblogs.com/windwithlife/archive/2009/05/21/1486578.html<br />最近一直忙于用live555(版本2010-05-29)开发流媒体服务器软件,主要将h264转为h263然后用live555实现rtsp等协议可 以让vlc、...
  • 软件开发中,一般都是客户端软件向服务器端发出各种各样的请求,那么服务器端会向客户端发出各种各样的请求吗
  • 开发服务器

    千次阅读 2016-02-01 11:40:11
    简述如何在云服务器开发软件,并提供“锐米云服务器开发源代码”。
  • 高级软件开发工程师 | 流媒体服务器开发工程师 | 
  • 开源服务器软件

    千次阅读 2014-06-29 12:25:12
    收集的一些开源服务器软件,可用于拓展服务器功能设计与开发
  • 现今互联网时代,人们的生活已经越来越离不来手机...app软件开发商是比较重视用户的体验度的,毕竟现在社会竞争压力大,除了app功能外、画面排版外,app的打开速度和稳定性也是影响用户体验度的重要因素。如果app不稳定
  • EasyDSS流媒体服务器软件,提供一站式的转码、点播、直播、时移回放服务,极大地简化了开发和集成的工作。 其中,点播功能主要包含:上传、转码、分发。直播功能,主要包含:直播、录像, 直播支持RTMP输入,RTMP/...
  • 服务器高级开发工程师

    千次阅读 2015-02-02 22:36:59
    10K~30K/月 | 武汉市 | 全职 ...1、负责服务器端架构设计、模块...2、主导制定和指导执行服务器端开发流程和标准,对服务器软件开发质量负全责;  3、协调与客户端、策划、公司其他技术支持部门之间的关系; 
  • 我发觉需要区分单纯的Linux c/c++服务器开发和嵌入式软件工程师里面要求的要会Linux多线程编程等等的,一个毕竟是纯服务器的,一个是嵌入式软件工程师,还是有区别的。 这也就像王道课程和华清课程的区别,华清...
  • 对于商业用户来说,目前最流行的应用服务器软件要数BEA公司开发的WebLogic,下面介绍的是作者使用的WebLogic8.1版本。 安装 在安装前,用户必须获得一套对应于用户的操作系统的JDK(在 www.sun.
  • 由于共同爱好和目标组成的2~5人的软件开发团队,在团队初期组建初期,需要一个成本低,而又能对外展示和管理软件代码的平台。因此,选择以下方式来搭建一个服务平台。 花生棒官网:http://www.oray.com 案例...
  • C++游戏服务器开发常用工具介绍在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用。庄子有云,“吾生也有涯,而知也无涯,以有涯随无...
  • 关于用DELPHI开发服务器软件中的一些经验 ( 积分:100, 回复:137, 阅读:6014 ) 分类: Internet/TCPIP ( 版主:luyear, robertcool ) 来自: element , 时间: 2003-12-8 20:52:00, ID: 2342105 ...
  • 常用的web服务器软件整理

    千次阅读 2018-07-25 16:21:40
    常用的web服务器软件整理 (1)ApacheApache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。...
  • 从C++起步到MFC实战VC++软件工程师高端培训(服务器开发方向)学习课程 主要内容: 本部分是您成为VC++软件工程师必备的阶段,如果您没有任何基础,学习C++能快速让您进入编程领域,建议配合书籍《C++...
  • 这次经历大致分为以下几个阶段:一、C#基本操作学习和简单TCP通信...TCP的实现主要还是以网络博客为主,这类的博客很多,通过简单的搭建,就可以实现一个服务器。有同事的前车之鉴,建议我们使用异步。我使用的方...
  • 软件开发常见的开发方向

    千次阅读 2019-05-11 16:01:58
    说起软件开发,现在是无人不知,无人不晓。好多人可能以为软件开发就是做一样工作的,其实不然,软件开发也分很多种类型,很多方向。做为一个过来人,简单介绍一些常见的开发方向。 1.桌面程序:Java、C++、C#、VB、...
  • 到底谁牛 Linux邮件服务器软件比较

    千次阅读 2012-04-11 13:56:12
    几年以前,Linux环境下可以选择 的可以免费邮件服务器软件只有Sendmail,但是由于Sendmail的缺陷,一些开发 者先后开发了若干种其他的邮件服务器软件。当前,运行在Linux环境下免费的 邮件服务器,或者称为MTA(Mail ...
  • 今天,在这篇文章中,我将介绍一款我自主开发的即时通讯软件flamingo(中文:火烈鸟),并开源其服务器和pc客户端代码。以此来对前几篇文章中说到的理论进行实践。 代码在github和csdn.net上各上传了一份: github...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,764
精华内容 13,105
关键字:

服务器软件开发