博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Go语言在服务端做Restful接口和socket通信
阅读量:6246 次
发布时间:2019-06-22

本文共 3827 字,大约阅读时间需要 12 分钟。

请到我的个人博客看golang rest相关文章   

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

已经转到: 

下图即是REST的架构图:

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

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

package main import (     "fmt"     "github.com/drone/routes"     "net/http" ) func getuser(w http.ResponseWriter, r *http.Request) {
   params := r.URL.Query()    uid := params.Get(":uid")    fmt.Fprintf(w, "you are get user %s", uid) } func modifyuser(w http.ResponseWriter, r *http.Request) {
   params := r.URL.Query()    uid := params.Get(":uid")    fmt.Fprintf(w, "you are modify user %s", uid) } func deleteuser(w http.ResponseWriter, r *http.Request) {
   params := r.URL.Query()    uid := params.Get(":uid")    fmt.Fprintf(w, "you are delete user %s", uid) } func adduser(w http.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) } //xiaorui.cc func main() {
   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

结果:

接着咱们再说下 go的socket 。

客户端的情况

服务端的情况:

server.go

package main import (     "fmt"     "net"     "os" ) func main() {
   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()    if err != nil {
       fmt.Println("Error when listen: ", remote)        os.Exit(-1)    }    for {
       var res string        conn, err := lis.Accept()        if err != nil {
           fmt.Println("Error accepting client: ", err.Error())            os.Exit(0)        }        go func(con net.Conn) {
           fmt.Println("New connection: ", con.RemoteAddr())            for {
               length, err := con.Read(data)                if err != 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)    } }

client.go

package main import (     "fmt"     "net"     "os" ) var str string var msg = make([]byte, 1024) func main() {
   var (        host   = "127.0.0.1"        port   = "8080"        remote = host + ":" + port    )    con, err := net.Dial("tcp", remote)    defer con.Close()    if err != nil {
       fmt.Println("Server not found.")        os.Exit(-1)    }    fmt.Println("Connection OK.")    for {
       fmt.Printf("Enter a sentence:")        fmt.Scanf("%s\n", &str)        if str == "quit" {
           fmt.Println("Communication terminated.")            os.Exit(1)        }        in, err := con.Write([]byte(str))        if err != nil {
           fmt.Printf("Error when send to server: %d\n", in)            os.Exit(0)        }        length, err := con.Read(msg)        if err != nil {
           fmt.Printf("Error when read from server.\n")            os.Exit(0)        }        str = string(msg[0:length])        fmt.Println(str)    } }

Go的并发模式

package main import (         "fmt"         "runtime" ) func say(s string) {
       for i := 0; i < 5; i++ {
               runtime.Gosched()                fmt.Println(s)        } } func main() {
       go say("world")        say("end") }

结果:

转载地址:http://mreia.baihongyu.com/

你可能感兴趣的文章
Hanlp中N最短路径分词详细介绍
查看>>
Oracle集群技术 | OLR与套接字文件(二)
查看>>
Android 打开网络上pdf文件
查看>>
Hibernate主键生成策略及选择
查看>>
MySQL8.0.14 - 新特性 - InnoDB Parallel Read简述
查看>>
洛谷 P2717 寒假作业
查看>>
苏宁低调内测“宁互宝”,网络互助成巨头必争之地
查看>>
了解一下:一款好用的 Maven Library 发布插件
查看>>
spring boot 集成cache时,与shiro的冲突解决
查看>>
连界创新获翊翎资本、连界资本8000万元融资,专注赋能产业升级
查看>>
PostgreSQL 11 新特性解读: psql 新增 \\gdesc 显示查询结果的列名和类型
查看>>
Nginx安全优化
查看>>
SQL 中 关于Left Join 转为 Inner Join 的问题
查看>>
java9 响应式编程支持
查看>>
常用的高防有哪几类?主要的区别是什么?
查看>>
数据中心的六大节能方法
查看>>
k8s重要概念
查看>>
AT80C51串口通信编程 | 按键控制LED灯列
查看>>
关于网站建设的主要流程和步骤【新手指南】
查看>>
【译】如何更好的使用javascript数组
查看>>