Add 0.8.4.md syntax highlighting

This commit is contained in:
vCaesar
2016-12-18 16:17:56 +08:00
parent 908a3fad86
commit fc9127e27e

View File

@@ -45,6 +45,8 @@ T、T1和T2类型必须能被`encoding/gob`包编解码。
### HTTP RPC ### HTTP RPC
http的服务端代码实现如下 http的服务端代码实现如下
```Go
package main package main
import ( import (
@@ -90,10 +92,13 @@ http的服务端代码实现如下
} }
} }
```
通过上面的例子可以看到我们注册了一个Arith的RPC服务然后通过`rpc.HandleHTTP`函数把该服务注册到了HTTP协议上然后我们就可以利用http的方式来传递数据了。 通过上面的例子可以看到我们注册了一个Arith的RPC服务然后通过`rpc.HandleHTTP`函数把该服务注册到了HTTP协议上然后我们就可以利用http的方式来传递数据了。
请看下面的客户端代码: 请看下面的客户端代码:
```Go
package main package main
import ( import (
@@ -140,15 +145,19 @@ http的服务端代码实现如下
} }
```
我们把上面的服务端和客户端的代码分别编译,然后先把服务端开启,然后开启客户端,输入代码,就会输出如下信息: 我们把上面的服务端和客户端的代码分别编译,然后先把服务端开启,然后开启客户端,输入代码,就会输出如下信息:
```Go
$ ./http_c localhost $ ./http_c localhost
Arith: 17*8=136 Arith: 17*8=136
Arith: 17/8=2 remainder 1 Arith: 17/8=2 remainder 1
```
通过上面的调用可以看到参数和返回值是我们定义的struct类型在服务端我们把它们当做调用函数的参数的类型在客户端作为`client.Call`的第23两个参数的类型。客户端最重要的就是这个Call函数它有3个参数第1个要调用的函数的名字第2个是要传递的参数第3个要返回的参数(注意是指针类型)通过上面的代码例子我们可以发现使用Go的RPC实现相当的简单方便。 通过上面的调用可以看到参数和返回值是我们定义的struct类型在服务端我们把它们当做调用函数的参数的类型在客户端作为`client.Call`的第23两个参数的类型。客户端最重要的就是这个Call函数它有3个参数第1个要调用的函数的名字第2个是要传递的参数第3个要返回的参数(注意是指针类型)通过上面的代码例子我们可以发现使用Go的RPC实现相当的简单方便。
### TCP RPC ### TCP RPC
上面我们实现了基于HTTP协议的RPC接下来我们要实现基于TCP协议的RPC服务端的实现代码如下所示 上面我们实现了基于HTTP协议的RPC接下来我们要实现基于TCP协议的RPC服务端的实现代码如下所示
```Go
package main package main
@@ -212,11 +221,14 @@ http的服务端代码实现如下
} }
} }
```
上面这个代码和http的服务器相比不同在于:在此处我们采用了TCP协议然后需要自己控制连接当有客户端连接上来后我们需要把这个连接交给rpc来处理。 上面这个代码和http的服务器相比不同在于:在此处我们采用了TCP协议然后需要自己控制连接当有客户端连接上来后我们需要把这个连接交给rpc来处理。
如果你留心了你会发现这它是一个阻塞型的单用户的程序如果想要实现多并发那么可以使用goroutine来实现我们前面在socket小节的时候已经介绍过如何处理goroutine。 如果你留心了你会发现这它是一个阻塞型的单用户的程序如果想要实现多并发那么可以使用goroutine来实现我们前面在socket小节的时候已经介绍过如何处理goroutine。
下面展现了TCP实现的RPC客户端 下面展现了TCP实现的RPC客户端
```Go
package main package main
import ( import (
@@ -263,11 +275,14 @@ http的服务端代码实现如下
} }
```
这个客户端代码和http的客户端代码对比唯一的区别一个是DialHTTP一个是Dial(tcp),其他处理一模一样。 这个客户端代码和http的客户端代码对比唯一的区别一个是DialHTTP一个是Dial(tcp),其他处理一模一样。
### JSON RPC ### JSON RPC
JSON RPC是数据编码采用了JSON而不是gob编码其他和上面介绍的RPC概念一模一样下面我们来演示一下如何使用Go提供的json-rpc标准包请看服务端代码的实现 JSON RPC是数据编码采用了JSON而不是gob编码其他和上面介绍的RPC概念一模一样下面我们来演示一下如何使用Go提供的json-rpc标准包请看服务端代码的实现
```Go
package main package main
import ( import (
@@ -331,9 +346,11 @@ JSON RPC是数据编码采用了JSON而不是gob编码其他和上面介
} }
} }
```
通过示例我们可以看出 json-rpc是基于TCP协议实现的目前它还不支持HTTP方式。 通过示例我们可以看出 json-rpc是基于TCP协议实现的目前它还不支持HTTP方式。
请看客户端的实现代码: 请看客户端的实现代码:
```Go
package main package main
@@ -380,7 +397,8 @@ JSON RPC是数据编码采用了JSON而不是gob编码其他和上面介
fmt.Printf("Arith: %d/%d=%d remainder %d\n", args.A, args.B, quot.Quo, quot.Rem) fmt.Printf("Arith: %d/%d=%d remainder %d\n", args.A, args.B, quot.Quo, quot.Rem)
} }
```
## 总结 ## 总结
Go已经提供了对RPC的良好支持通过上面HTTP、TCP、JSON RPC的实现,我们就可以很方便的开发很多分布式的Web应用我想作为读者的你已经领会到这一点。但遗憾的是目前Go尚未提供对SOAP RPC的支持欣慰的是现在已经有第三方的开源实现了。 Go已经提供了对RPC的良好支持通过上面HTTP、TCP、JSON RPC的实现,我们就可以很方便的开发很多分布式的Web应用我想作为读者的你已经领会到这一点。但遗憾的是目前Go尚未提供对SOAP RPC的支持欣慰的是现在已经有第三方的开源实现了。