写了第一小节的一部分

This commit is contained in:
xiemengjun
2012-10-07 23:27:33 +08:00
parent 2a0d5d7969
commit 4a9e2290d5
6 changed files with 35 additions and 10 deletions

19
8.1.md
View File

@@ -1,8 +1,23 @@
#8.1 webSockets #8.1 Socket编程
在很多底层开发者的眼里一切编程都是Socket话虽然有点夸张但是事实如此现在的网络编程几乎都是用的Socket。如我们每天打开浏览器浏览网页时浏览器的进程怎么和Web服务器进行通信的呢当你用QQ聊天时QQ进程怎么和服务器或者是你的好友所在的QQ进程进行通信的呢当你打开PPstream观看视频时PPstream进程如何视频服务器进行通信的呢这些都是靠Socket来进行通信的可见Soacket编程对于现在的编程来说是如何的重要接下来我们讲介绍Go语言中如何来进行Socket编程。
##什么是Socket
Socket起源于Unix而Unix/Linux基本哲学之一就是“一切皆文件”都可以用“打开open > 读写write/read > 关闭close”模式来操作。Socket就是该模式的一个实现网络的Socket数据传输是一种特殊的I/OSocket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket()该函数返回一个整型的Socket描述符随后的连接建立、数据传输等操作都是通过该Socket实现的。
常用的Socket类型有两种流式SocketSOCK_STREAM和数据报式SocketSOCK_DGRAM。流式是一种面向连接的Socket针对于面向连接的TCP服务应用数据报式Socket是一种无连接的Socket对应于无连接的UDP服务应用。
##Socket如何通信
网络中进程之间如何通过Socket通信呢首要解决的问题是如何唯一标识一个进程否则通信无从谈起在本地可以通过进程PID来唯一标识一个进程但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题网络层的“ip地址”可以唯一标识网络中的主机而传输层的“协议+端口”可以唯一标识主机中的应用程序进程。这样利用三元组ip地址协议端口就可以标识网络的进程了网络中的进程通信就可以利用这个标志与其它进程进行交互。请看下面这个TCP/IP协议结构图
![](images/8.1.socket.png?raw=true)
使用TCP/IP协议的应用程序通常采用应用编程接口UNIX BSD的套接字socket和UNIX System V的TLI已经被淘汰来实现网络进程之间的通信。就目前而言几乎所有的应用程序都是采用socket而现在又是网络时代网络中进程通信是无处不在这就是为什么说“一切皆Socket”。
##TCP Socket
##UDP Socket
## links ## links
* [目录](<preface.md>) * [目录](<preface.md>)
* 上一节: [Web服务](<8.md>) * 上一节: [Web服务](<8.md>)
* 下一节: [Socket编程](<8.2.md>) * 下一节: [webSockets](<8.2.md>)
## LastModified ## LastModified
* $Id$ * $Id$

4
8.2.md
View File

@@ -1,7 +1,7 @@
#8.2 Socket编程 #8.2 webSockets
## links ## links
* [目录](<preface.md>) * [目录](<preface.md>)
* 上一节: [webSockets](<8.1.md>) * 上一节: [Socket编程](<8.1.md>)
* 下一节: [REST](<8.3.md>) * 下一节: [REST](<8.3.md>)
## LastModified ## LastModified

2
8.3.md
View File

@@ -1,7 +1,7 @@
#8.3 REST #8.3 REST
## links ## links
* [目录](<preface.md>) * [目录](<preface.md>)
* 上一节: [Socket编程](<8.2.md>) * 上一节: [webSockets](<8.2.md>)
* 下一节: [RPC](<8.4.md>) * 下一节: [RPC](<8.4.md>)
## LastModified ## LastModified

16
8.md
View File

@@ -1,9 +1,19 @@
#8 Web服务 #8 Web服务
Web服务可以让你在HTTP协议的基础上通过XML或者JSON来交换信息。如果你想知道上海的天气预报、中国石油的股价或者淘宝商家的一个商品信息你可以编写一段简短的代码通过抓取这些信息然后通过标准的接口开放出来就如同你调用一个本地函数并返回一个值。
Web服务背后的关键在于平台的无关性你可以运行你的服务在Linux系统可以与其他Window的asp.net程序交互同样的也可以通过同一个接口和运行在FreeBSD上面的JSP无障碍地通信。
目前主流的有如下几种Web服务REST、SOAP。
REST请求是很直观的因为REST是基于HTTP协议的一个补充他的每一次请求都是一个HTTP请求然后根据不同的method来处理不同的逻辑很多Web开发者都熟悉HTTP协议所以学习REST是一件比较容易的事情。所以我们在8.3小节讲详细的讲解如何在Go语言中来实现REST方式。
SOAP是W3C在跨网络信息传递和远程计算机函数调用方面的一个标准。但是SOAP非常复杂其完整的规范篇幅很长而且内容仍然在增加。Go语言是以简单著称所以我们不会介绍SOAP这样复杂的东西。而Go语言提供了一种天生性能很不错开发起来很方便的RPC机制我们将会在8.4小节详细介绍如何使用Go语言来实现RPC。
Go语言是21世纪的C语言我们追求的是性能、简单所以我们在8.1小节里面介绍如何使用Socket编程很多游戏服务都是采用Socket来编写服务段因为HTTP协议相对而言比较耗费性能让我们看看Go语言如何来Socket编程。目前随着HTML5的发展webSockets也逐渐的成为很多页游公司接下来开发的一些手段我们将在8.2小节里面讲解Go语言如何编写webSockets的代码。
## 目录 ## 目录
* 1. [webSockets](8.1.md) * 1. [Socket编程](8.1.md)
* 2. [Socket编程](8.2.md) * 2. [webSockets](8.2.md)
* 3. [REST](8.3.md) * 3. [REST](8.3.md)
* 4. [RPC](8.4.md) * 4. [RPC](8.4.md)
* 5. [小结](8.5.md) * 5. [小结](8.5.md)
@@ -11,7 +21,7 @@
## links ## links
* [目录](<preface.md>) * [目录](<preface.md>)
* 上一章: [第七章总结](<7.5.md>) * 上一章: [第七章总结](<7.5.md>)
* 下一节: [webSockets](<8.1.md>) * 下一节: [Socket编程](<8.1.md>)
## LastModified ## LastModified
* $Id$ * $Id$

BIN
images/8.1.socket.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

View File

@@ -47,8 +47,8 @@
- 7.4 [模板处理](7.4.md) - 7.4 [模板处理](7.4.md)
- 7.5 [小结](7.5.md) - 7.5 [小结](7.5.md)
* 8.[Web服务](8.md) * 8.[Web服务](8.md)
- 8.1 [webSockets](8.1.md) - 8.1 [Socket编程](8.1.md)
- 8.2 [Socket编程](8.2.md) - 8.2 [webSockets](8.2.md)
- 8.3 [REST](8.3.md) - 8.3 [REST](8.3.md)
- 8.4 [RPC](8.4.md) - 8.4 [RPC](8.4.md)
- 8.5 [小结](8.5.md) - 8.5 [小结](8.5.md)