如何写一个简单的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 ...
随机推荐
- LINQ to XML 实战
LINQ to XML 轴定义:创建XML树或将XML文档加载到XML树之后,可以进行查询,从而查找元素并检索它们的值. 两类轴方法:-一些轴就是XELement和XDocument类中返回IEnum ...
- 【C++面试】常考题复习:排序算法
// Sort.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> /*********** ...
- Java 并发编程实战 摘要
第一部分小结 并发技巧清单: 可变状态是至关重要的(It's the mutable state ,stupid). 所有的并发问题结为如何协调对并发状态的访问,可变状态越少,就越容易确保线程安全性. ...
- com.google.inject.CreationException: Guice creation errors
错误的原因:xml文件中方法名重复或错误
- Easyui扩展或者重载(方法和属性)
1: 使用$.fn.datagrid.defaults.editors重载默认值. 每个编辑器都有以下方法: 名称 属性 描述 init container, options 初始化编辑器并返回目标对 ...
- 设计模式-代理模式(Proxy)
应用场景: 领导都有秘书,一般会代理领导的部分职能角色,处理签字.报销.开会等任务.很多新人可能都只知道秘书的存在,毕竟每天与其打交道,不知道领导的存在.但是领导的的确确是真实存在的. 场景说明: 代 ...
- [leetcode]_Binary Tree Inorder Traversal
题目:二叉树的中序遍历. 思路:用递归来写中序遍历非常简单.但是题目直接挑衅说,----->"Recursive solution is trivial".好吧.谁怕谁小狗. ...
- 【译】Spark官方文档——Spark Configuration(Spark配置)
注重版权,尊重他人劳动 转帖注明原文地址:http://www.cnblogs.com/vincent-hv/p/3316502.html Spark主要提供三种位置配置系统: 环境变量:用来启动 ...
- Java 第六天 Spring Annotation 和其它
Annotation,是Java语言中的一种特殊的元数据语法,Spring支持使用annotation来进行对象实例化和装配 使用Annotation在Spring的配置xml中添加context命名 ...
- 在WPF中显示GIF图片并实现循环播放
WPF中有一个MediaElement媒体控件,可以来播放媒体,同时也可以显示GIF图片.但看到网上有些人说用MediaElement不能加载作为资源或内嵌的资源的GIF图片,我猜他们一定是在前台用X ...