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

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

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

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


165521917.png

我这边使用golang的drone/routes库实现restful服务。  下面是实现rest的具体事例代码。

packagemain
import (
    "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

packagemain
import (
    "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)
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值