如何写一个简单的Web Server(一)
在本篇博文中我将介绍如何写一个Web Server.博文中大部分资料我是参考的这篇文章(http://www.linuxhowtos.org/C_C++/socket.htm),英文不错的同学可以参考这篇文章。
进程间通信
在操作系统中,进行通信的实际上是进程而不是程序,进程可以被认为是运行在端系统中的程序。当进程运行在相同的端系统的时候,他们使用进程间通信机制相互通信。进程间相互通信的规则是由端系统上的的操作系统确定的。
客户机和服务器进程
网络应用程序是由成对的进程组成,这些进程通过网络互相发送报文。在C/S架构的应用程序中,一个客户机浏览进程与一台服务器进程交换报文。在一个P2P文件共享系统中,文件从一个对等方的进程传送到另一个对等方的进程,在每对通信进程中我们通常将这两个进程标示为客户机(client),而另一个进程标示服务器(server)。在Web中浏览器进程是一个客户机进程,Web服务器是服务器进程。对于P2P文件共享。下载文件的对等方被标示为客户机,上载文件的对等发被标示为服务器。在P2P文件共享等应用中,一个进程即可能是客户机也可能是服务器,实际上在一个P2P文件共享系统中,一个进程既能上载文件也下载文件,但无论如何,在一对通信进程中,我们任然能标示客户机和服务器,我们定义客户机和服务器进程如下:
在给定的一对进程之间的通信会话,发起通信的进程被标示为客户机,在会话开始等待联系的进程是服务器。- 进程与计算机网络之间的接口(socket)
多数的应用程序是由通信进程组成的,每对中两个进程互相发送报文,从一个进程向另一个进程发送的报文必须通过网络发送,进程通过套接字(socket)的软件接口在网络上发送和接收报文。进程相当于一座房子,当一个进程向另一台进程发送报文时,它将报文推出门(套接字),该发送进程到另一接收进程有用于运输的基础设施,该设施将报文传送到目的进程的门口,一旦目的报文抵达到目的主机,目地报文通过门(套接字)传递,然后接收进程对报文进行处理。下图表示两个主机进程通过套接字通信:
套接字(socket)类型
当套接字进程被创建之后,需要实例化地址域和套接字的类型,拥有相同的地址域和相同的套接字类型的进程才能够互相通信;有两个广泛使用的地址域。
1.unix domain: 两个进程通过共享一个共同的文件系统来通信。
2.Internet domain: 两个进程通过因特网通信 。在unix domain中套接字的地址是由字符串组成的,用于进入文件系统; 在Internet domain 中套接字的地址是主机在因特网上的IP地址。
有两种广泛使用的套接字类型:
1.stream sockets: 通过字符流的方式进行通信
2.datagram sockets:一次读取所有的信息stream sockets 和 datagram都有各自的运输层协议,stream sockets使用TCP协议(TCP协议是面向连接,并且为两个端系统之间的数据流动提供可靠的字节流通道); datagram sockets 使用UDP协议(UDP是无连接的,从一个端系统向另一个端系统发送独立的数据分组,不对交付提供任何保证)。
端口
然而套接字通信还需要主机上的端口号,端口号是由十六位的无符号整型组成的,在Unix中端口号较小的都被标准服务使用了,例如21号端口就是FTP服务的端口号;但是端口号大于2000的我们是可以使用的。
介绍完这些基础的知识之后,下篇将通过客户机和服务器的代码来对套接字通信的过程做更加深刻的分析
如何写一个简单的Web Server(一)的更多相关文章
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- 编写一个简单的Web Server
编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...
- 动手写一个简单的Web框架(模板渲染)
动手写一个简单的Web框架(模板渲染) 在百度上搜索jinja2,显示的大部分内容都是jinja2的渲染语法,这个不是Web框架需要做的事,最终,居然在Werkzeug的官方文档里找到模板渲染的代码. ...
- 动手写一个简单的Web框架(Werkzeug路由问题)
动手写一个简单的Web框架(Werkzeug路由问题) 继承上一篇博客,实现了HelloWorld,但是这并不是一个Web框架,只是自己手写的一个程序,别人是无法通过自己定义路由和返回文本,来使用的, ...
- 动手写一个简单的Web框架(HelloWorld的实现)
动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...
- 【Java学习笔记】如何写一个简单的Web Service
本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...
- express 写一个简单的web app
之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...
- 写一个简单的Web框架
在.Net中有两种常用的Web开发方式,一种是Asp.Net WebForm,另一种是Asp.Net MVC.我先简单的给大家介绍下这两种开发方式的特点,然后再应用自定义脚本映射,反射,json2te ...
随机推荐
- UIButton设置imgae图片自适应button的大小且不变形
在某些情况下,我们使用的UIButton的背景图片不一定就是标准的尺寸,有时会偏大,那么怎么办? 这个比较简单直接设置 : self.imageView.contentMode = UIView ...
- 面向初学者的 Windows 10 UWP 应用开发
眼看 Windows 10 for Mobile 正式版也快要推送了,就先挖个坑吧,原文视频链接为:Windows 10 development for absolute beginners,以下博客 ...
- mysql中union与union all的区别
当查询表结构完全相同的多张表的数据时: 1.当查询条件完全相同且不包括主键,此时用union查询会过滤掉查询出的重复的记录,及漏查记录:使用union all进行查询,则会查出所有的符合条件的记录,保 ...
- MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份]
MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份] 1.Xtrabackup的安装 percona-xtrabackup-2.2.3-4982.el6.x86_ ...
- 搭建高性能计算环境(十)、应用软件的安装之Wien2k
1,首先安装fftw .tar.gz cd fftw- ./configure --prefix=/opt/fftw- --enable-shared --enable-float --enable- ...
- Linux下发包处理
Linux下发包处理: 1.用top分析工具来查看哪个进程占用的CPU资源比较大 2. 通过命令来查看都是那些端口被占用了 netstat -antp | more 3.在top里面查看到的异 ...
- jquery easyui combobox
$("#select_Dic").combobox({ url: "http://www.cnblogs.com/Ajax/ ...
- redis 配置文件解读
# Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => 1000 bytes # 1kb = ...
- 神奇的fastcgi_finish_request
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行 ...
- 一款jQuery满屏自适应焦点图切换特效
一款jQuery满屏自适应焦点图切换特效 ,自适应当前浏览器的宽度,可以作为网站整个大背景的却换效果,很不错的一款不jquery特效. 兼容性没的说直接秒杀了IE6.适用浏览器:IE6.IE7.IE8 ...