转载自: 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-25Golang rfyiamcool

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

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

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

我这边使用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+ ":"+ portdata  = 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 resstringconn,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:"+ rescon.Write([]byte(res))}}(conn)}
}
import ("fmt""net""os" ) func main() {var (host = "127.0.0.1"port = "8080"remote = host + ":" + portdata = 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 stringconn, 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:" + rescon.Write([]byte(res))}}(conn)} }

socket client的go实现代码

packagemain
import ("fmt""net""os"
)
varstr string
var 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)}
}
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语言在服务端做Restful接口和socket通信相关推荐

  1. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  2. mysql服务器是否支持tcp/ip连接,(3)MySQL客户端与服务端的TCP/IP及socket连接方式-Go语言中文社区...

    MySQL客户端与服务端的TCP/IP及socket连接方式 客户端与服务器模型 客户端与服务端模型 TCP/IP方式连接 解释说明 TCP/IP套接字方式是MySQL在任何平台下都提供的连接方式,也 ...

  3. github的webhooks无法刷新config服务端的bus-refresh接口

    使用SpringCloud Bus动态刷新配置需要访问 config服务端的接口/actuator/bus-refresh(以post方法),例如我config服务端启动在本机的8083端口:http ...

  4. 网狐获取服务器信息,网狐服务端扩展业务接口手册

    互联网的精神是开放的,是分享的.开放,使它不存在时间和地域的界限,知识的获取在互联网时代变得简单.而分享精神,更是互联网发展的原动力,它让不同的见解得以交流,各式各样的需求得到满足. 网狐科技成立于2 ...

  5. 后端的一个刚毕业的小伙子老早完成了架构和服务端逻辑,接口洋洋洒洒列了出来。。。...

    后端的一个刚毕业的小伙子老早完成了架构和服务端逻辑,接口洋洋洒洒列了出来... 转载于:https://www.cnblogs.com/panxuejun/p/8422639.html

  6. 爬虫-访问用户中心页面-服务端做了些什么

    以django为例 流程如下: 在服务端主要检察cookie这个字典 如果字典中有记录登陆状态的信息,就通过 如果没有,就跳转

  7. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受

    一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类         Serve ...

  8. GX Works3 (四):FX5U作为服务端的以太网MC协议梯形图通信编程

    一.通过通信协议进行通信 1.先根据操作文档进行基本操作 2.打开通讯协议支持功能并设置 3.Request\Normal response\Error response 全部可输入选项,输入D2进行 ...

  9. 服务端朋友圈接口代码的编写和理解

    前期准备...... 1.通常我们在IDEA中建立两个包  2. 我们主要用Postman对朋友圈各种接口调用的实现做接口测试      3. 测试接口我们主要用下面几种请求方式: > GET ...

最新文章

  1. 残差网络的前世今生与原理 | 赠书
  2. 基于vue的公共looploading组件(vue循环加载--组件)
  3. 使用system函数时应该忽略两个信号
  4. oracle一个月内的数据,oracle 查询前一小时、一天、一个月、一年的数据
  5. r语言解释回归模型的假设_模型假设-解释
  6. improve怎么加ing_雅思写作7分秘籍:Niko原创大作文写作机经教你怎么得高分!
  7. 修复IE下相对定位子元素溢出Bug
  8. MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?
  9. HTTP常见问题总结
  10. 移动iptv安装三方软件
  11. 腾讯汤道生:产业互联网时代,安全成为CEO的一把手工程
  12. HCNR200和HCNR201在电机驱动和电流回路中的应用
  13. 四川泸州市高职计算机学校,四川泸州职高学校有哪些?
  14. workon 未找到命令
  15. 为什么使用Flatten layer?
  16. 【微信测试号实战——01】注册一个属于你自己的微信测试号
  17. 深度解读阿里巴巴云原生镜像分发系统 Dragonfly
  18. PHP源生数据分页显示
  19. 嵌入式面试常见问题(二)
  20. 多家银行ATM机取款手续费比较-文图

热门文章

  1. 独舞风雪夜 跟我学mvc系列
  2. C# Monitor 使用 多线程通信
  3. 各种边缘检测算法效果对比-差分运算法、Sobel、Scharr、Laplace(拉普拉斯)、Roberts、Canny
  4. python没用_大部分Python资料都没有说到的重点-用实战教你解决问题的思路
  5. 安装SQL2000,挂起无法安装问题
  6. Shell命令-搜索文件或目录之whereis、locate
  7. Spring STS Call Hierarchy 查找不到被调用的信息
  8. Apache主配置文件httpd.conf 详解
  9. 项目发布错误的解决方法
  10. 剑指offer 算法 (分解让复杂问题简单)