关于Go语言在服务端做Restful接口和socket通信
来源:互联网 发布:淘宝两颗心 编辑:程序博客网 时间:2024/06/06 00:46
转载自: http://xiaorui.cc/2014/10/25/%e5%85%b3%e4%ba%8ego%e8%af%ad%e8%a8%80%e5%9c%a8%e6%9c%8d%e5%8a%a1%e7%ab%af%e5%81%9arestful%e6%8e%a5%e5%8f%a3%e5%92%8csocket%e9%80%9a%e4%bf%a1/
关于Go语言在服务端做Restful接口和socket通信
2014-10-25Golangrfyiamcool
下图是关于rest的使用介绍,有些老生常谈了。
当REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST简化了客户端和服务器的实现,而且对于使用REST开发的应用程序更加容易扩展。
其实说白了,就是根据不同的方法,来分类不同的任务~
我这边使用golang的drone/routes库实现restful服务。 下面是实现rest的具体事例代码。
packagemainimport ( "fmt" "github.com/drone/routes" "net/http")funcgetuser(whttp.ResponseWriter,r *http.Request){ params:=r.URL.Query() uid:=params.Get(":uid") fmt.Fprintf(w,"you are get user %s",uid)}func modifyuser(whttp.ResponseWriter,r *http.Request){ params:=r.URL.Query() uid:=params.Get(":uid") fmt.Fprintf(w,"you are modify user %s",uid)}funcdeleteuser(whttp.ResponseWriter,r *http.Request){ params:=r.URL.Query() uid:=params.Get(":uid") fmt.Fprintf(w,"you are delete user %s",uid)}func adduser(whttp.ResponseWriter,r *http.Request){ params:=r.URL.Query() uid:=params.Get(":uid") fmt.Fprint(w,"you are add user %s",uid) fmt.Printf("you are add user %s",uid)}funcmain(){ mux:=routes.New() mux.Get("/user/:uid",getuser) mux.Post("/user/:uid",modifyuser) mux.Del("/user/:uid",deleteuser) mux.Put("/user/:uid",adduser) http.Handle("/",mux) http.ListenAndServe(":8088",nil)}//xiaorui.cc
下面说下golang socket的实例代码, 这边针对每个请求都使用协程处理请求。
server.go
packagemainimport ( "fmt" "net" "os")funcmain(){ var( host = "127.0.0.1" port = "8080" remote= host+ ":"+ port data = make([]byte,1024) ) fmt.Println("Initiating server... (Ctrl-C to stop)") lis,err :=net.Listen("tcp",remote) defer lis.Close() iferr !=nil { fmt.Println("Error when listen: ",remote) os.Exit(-1) } for{ var resstring conn,err :=lis.Accept() iferr !=nil { fmt.Println("Error accepting client: ",err.Error()) os.Exit(0) } go func(connet.Conn){ fmt.Println("New connection: ", con.RemoteAddr()) for{ length,err :=con.Read(data) iferr !=nil { fmt.Printf("Client %v quit.\n", con.RemoteAddr()) con.Close() return } res= string(data[0:length]) fmt.Printf("%s said: %s\n",con.RemoteAddr(),res) res= "You said:"+ res con.Write([]byte(res)) } }(conn) }}
socket client的go实现代码
packagemainimport ( "fmt" "net" "os")varstr stringvar msg= make([]byte,1024)funcmain(){ var( host = "127.0.0.1" port = "8080" remote= host+ ":"+ port ) con,err :=net.Dial("tcp",remote) defer con.Close() iferr !=nil { fmt.Println("Server not found.") os.Exit(-1) } fmt.Println("Connection OK.") for{ fmt.Printf("Enter a sentence:") fmt.Scanf("%s\n",&str) ifstr =="quit" { fmt.Println("Communication terminated.") os.Exit(1) } in,err :=con.Write([]byte(str)) iferr !=nil { fmt.Printf("Error when send to server: %d\n",in) os.Exit(0) } length,err :=con.Read(msg) iferr !=nil { fmt.Printf("Error when read from server.\n") os.Exit(0) } str= string(msg[0:length]) fmt.Println(str) }}
阅读全文
0 0
- 关于Go语言在服务端做Restful接口和socket通信
- 关于Go语言在服务端做Restful接口和socket通信
- Socket服务端和客户端通信
- socket服务端和客户端通信
- Go语言TCP Socket通信编程
- go语言类型和接口
- go语言笔记 - 服务端 socket开发相关
- 简单的Socket通信客户端和服务端
- socket建立服务端和客户端之间通信
- C#socket通信(客户端和服务端)
- 使用socket实现简单的客户端和服务端通信(C#语言)
- 基于restful服务端接口(一)
- 基于restful服务端接口(二)
- Java做Socket服务端与Delphi做Socket客户端的通信
- Socket通信----服务端
- socket 通信 服务端
- Socket ( Udp) 通信服务端
- socket通信服务端编程
- Java 基础知识整理的思维导图
- Python学习笔记(一)
- 在vue项目中引入highcharts图表的方法
- Java问题——数值舍入问题
- Java虚拟机JVM启动内存参数设置
- 关于Go语言在服务端做Restful接口和socket通信
- TCP三次握手四次挥手
- blur事件与click事件冲突怎么解决
- Five-In-a-Row CodeForces
- AngularJS 最常用的八种功能
- biTStream功能介绍与应用
- React component 生命周期
- 计算数字k在0到n中的出现的次数,k可能是0~9的一个值
- 产品汪的日常