写了第一小节的一部分
This commit is contained in:
19
8.1.md
19
8.1.md
@@ -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/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
|
||||||
|
|
||||||
|
常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。
|
||||||
|
##Socket如何通信
|
||||||
|
网络中进程之间如何通过Socket通信呢?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。请看下面这个TCP/IP协议结构图
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
使用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
4
8.2.md
@@ -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
2
8.3.md
@@ -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
16
8.md
@@ -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
BIN
images/8.1.socket.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 119 KiB |
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user