关于Go语言在服务端做Restful接口和socket通信

来源:互联网 发布:淘宝两颗心 编辑:程序博客网 时间:2024/06/06 00:46

下图是关于rest的使用介绍,有些老生常谈了。

当REST架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。REST简化了客户端和服务器的实现,而且对于使用REST开发的应用程序更加容易扩展。

其实说白了,就是根据不同的方法,来分类不同的任务~


165521917.png

我这边使用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)    }}