【网络编程】第2章(4)服务器软件设计概论

简介: 【网络编程】第2章(4)服务器软件设计概论

服务器软件设计概论

服务器的设计主要有以下三个方面:


传输协议:无连接和面向连接的访问


状态信息:无状态的和有状态的服务器


并发性:循环和并发服务器的实现


我们首先要有一个服务器设计算法,才能设计出服务器软件


概念性的服务器算法(最简单的)

1.创建一个套接字,将它绑定到一个熟知的端口上,并期望在这个端口上接受请求


2.进入无限循环,在该循环中,服务器接受来自客户的请求


3.处理这一请求,构造应答,然后将这个应答发回给客户


四种基本类型的服务器


一种循环的、面向连接的服务器的算法


1.创建套接字并将其绑定到他所提供服务的熟知端口上


2.将该端口设置为被动模式,使其准备为服务器所用


3.从该套接字上接受下一个连接请求,获得该连接的套接字


4.重复地读取来自客户的需求,构造响应,按照应用协议向客户发回响应;


5.当与某个特定客户完成交互时,关闭连接,并返回步骤3以接受新的连接。


循环的、无连接的服务器的算法


创建套接字并将其绑定到所提供服务的熟知端口上


重复地读取来自客户的请求,构造响应,按照应用协议向客户发回响应


并发的、无连接的服务器的算法


1.主1 创建套接字并将其绑定到所提供服务的熟知地址上。让该套接字保持为未连接的


2.主2 反复调用recvfrom接受来自客户的下一个请求,创建一个新的从进程(可能在一个新进程中)来处理响应


3.从1 从来自主进程的特定请求以及到该套接字的访问开始


4.从2 根据应用协议构造应答,并用sendto将该应答发回客户


5.从3 退出


并发的、面向连接服务器的算法


1.主1 创建套接字并将其绑定到所提供服务的熟知地址上。让该套接字保持非连接


2.主2 将该端口设置为被动模式,使其准备为服务器所用


3.主3 反复调用accept以便接受来自客户的下一个连接请求,并创建新的从线程或进程来处理响应


4.从1 由主进程传递来的连接请求(即针对连接的套接字)开始


5.从2 用该连接与客户进行交互:读取请求并发回响应


6.从3 关闭连接并退出。在处理完来自客户的所有请求后,从线程就退出


另外,单线程异步IO也能实现表面上的并发


1.创建套接字S并将其绑定到所提供服务的熟知端口上。将该套接字加到一个表中,该表中的项是可以进行I/O的描述符


2.使用select在已有的套接字上等待I/O


3.如果S准备就绪,使用accept获得下一个连接,并将这个新的套接字NSi加入到表中,该表中的项是可以进行I/O的描述符


4.如果是S以外的某些套接字准备就绪,就使用recv或read获得下一个请求,构造响应,用send或write将响应发回给客户


5.继续按照以上的步骤2进行处理


服务器设计算法选择要根据具体的应用和环境,但是服务器都会出现死锁的困扰,为什么会出现死锁?


如果服务器与客户通信使用了可能会阻塞的系统调用,一个不能正常工作的客户可能会引起单线程服务器死锁。在服务器中,死锁是一个严重的问题,因为它意味着一个客户的行为会使服务器不能处理其他客户的请求


相关文章
|
2月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
88 1
|
2月前
|
监控 安全 数据挖掘
网络游戏服务器如何有效防护DDoS与CC攻击
随着网络游戏行业的蓬勃发展,其背后的服务器架构日益复杂,同时也面临着前所未有的网络安全威胁。其中,分布式拒绝服务(DDoS)和CC(Challenge Collapsar,一种针对网页的攻击方式)攻击尤为突出,它们通过大量伪造请求或恶意流量,使服务器资源耗尽,导致服务中断或响应缓慢。因此,保障网络游戏服务器的安全,有效防护DDoS与CC攻击,已成为游戏行业亟待解决的问题。
|
18天前
|
存储 弹性计算 测试技术
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
阿里云服务器ECS实例可以分为多种实例规格族。根据CPU、内存等配置,一种实例规格族又分为多种实例规格。而实例规格又包含vCPU、处理器、内存、vTPM、本地存储、网络带宽、网络收发包PPS、连接数、弹性网卡、云盘带宽、云盘IOPS等指标,本文为大家详细介绍实例规格的这些指标,以供大家了解和选择。
阿里云服务器实例规格vCPU、内存、网络带宽、网络收发包PPS、连接数等性能指标详解
|
8天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
58 5
|
12天前
|
数据安全/隐私保护
Haskell网络编程:代理服务器的高级使用技巧
Haskell网络编程:代理服务器的高级使用技巧
|
24天前
|
存储 运维 网络协议
运维的基本概念:服务器和网络基础知识
运维的基本概念:服务器和网络基础知识
46 0
运维的基本概念:服务器和网络基础知识
|
2月前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
40 6
|
2月前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
69 0
|
2月前
|
存储 网络协议 物联网
网络中的“客户端”和“服务器
【8月更文挑战第24天】
43 0
|
3天前
|
安全 网络协议 网络安全
网络安全与信息安全:漏洞、加密与意识的三重奏
【9月更文挑战第32天】在数字世界的交响乐中,网络安全是那不可或缺的乐章。本文将带您深入探索网络安全的三大主题:网络漏洞的识别与防范、加密技术的奥秘以及安全意识的重要性。通过深入浅出的方式,我们将一起揭开这些概念的神秘面纱,并学习如何在实际生活中应用它们来保护自己的数字足迹。让我们开始这场既刺激又富有教育意义的旅程,提升个人和组织的网络安全防御能力。
下一篇
无影云桌面