关于Go语言在服务端做Restful接口和socket通信
转载自: 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通信
下图是关于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)}
}
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)}
}
关于Go语言在服务端做Restful接口和socket通信相关推荐
- 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互
基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...
- mysql服务器是否支持tcp/ip连接,(3)MySQL客户端与服务端的TCP/IP及socket连接方式-Go语言中文社区...
MySQL客户端与服务端的TCP/IP及socket连接方式 客户端与服务器模型 客户端与服务端模型 TCP/IP方式连接 解释说明 TCP/IP套接字方式是MySQL在任何平台下都提供的连接方式,也 ...
- github的webhooks无法刷新config服务端的bus-refresh接口
使用SpringCloud Bus动态刷新配置需要访问 config服务端的接口/actuator/bus-refresh(以post方法),例如我config服务端启动在本机的8083端口:http ...
- 网狐获取服务器信息,网狐服务端扩展业务接口手册
互联网的精神是开放的,是分享的.开放,使它不存在时间和地域的界限,知识的获取在互联网时代变得简单.而分享精神,更是互联网发展的原动力,它让不同的见解得以交流,各式各样的需求得到满足. 网狐科技成立于2 ...
- 后端的一个刚毕业的小伙子老早完成了架构和服务端逻辑,接口洋洋洒洒列了出来。。。...
后端的一个刚毕业的小伙子老早完成了架构和服务端逻辑,接口洋洋洒洒列了出来... 转载于:https://www.cnblogs.com/panxuejun/p/8422639.html
- 爬虫-访问用户中心页面-服务端做了些什么
以django为例 流程如下: 在服务端主要检察cookie这个字典 如果字典中有记录登陆状态的信息,就通过 如果没有,就跳转
- Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受
一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类 Serve ...
- GX Works3 (四):FX5U作为服务端的以太网MC协议梯形图通信编程
一.通过通信协议进行通信 1.先根据操作文档进行基本操作 2.打开通讯协议支持功能并设置 3.Request\Normal response\Error response 全部可输入选项,输入D2进行 ...
- 服务端朋友圈接口代码的编写和理解
前期准备...... 1.通常我们在IDEA中建立两个包 2. 我们主要用Postman对朋友圈各种接口调用的实现做接口测试 3. 测试接口我们主要用下面几种请求方式: > GET ...
最新文章
- 残差网络的前世今生与原理 | 赠书
- 基于vue的公共looploading组件(vue循环加载--组件)
- 使用system函数时应该忽略两个信号
- oracle一个月内的数据,oracle 查询前一小时、一天、一个月、一年的数据
- r语言解释回归模型的假设_模型假设-解释
- improve怎么加ing_雅思写作7分秘籍:Niko原创大作文写作机经教你怎么得高分!
- 修复IE下相对定位子元素溢出Bug
- MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?
- HTTP常见问题总结
- 移动iptv安装三方软件
- 腾讯汤道生:产业互联网时代,安全成为CEO的一把手工程
- HCNR200和HCNR201在电机驱动和电流回路中的应用
- 四川泸州市高职计算机学校,四川泸州职高学校有哪些?
- workon 未找到命令
- 为什么使用Flatten layer?
- 【微信测试号实战——01】注册一个属于你自己的微信测试号
- 深度解读阿里巴巴云原生镜像分发系统 Dragonfly
- PHP源生数据分页显示
- 嵌入式面试常见问题(二)
- 多家银行ATM机取款手续费比较-文图
热门文章
- 独舞风雪夜 跟我学mvc系列
- C# Monitor 使用 多线程通信
- 各种边缘检测算法效果对比-差分运算法、Sobel、Scharr、Laplace(拉普拉斯)、Roberts、Canny
- python没用_大部分Python资料都没有说到的重点-用实战教你解决问题的思路
- 安装SQL2000,挂起无法安装问题
- Shell命令-搜索文件或目录之whereis、locate
- Spring STS Call Hierarchy 查找不到被调用的信息
- Apache主配置文件httpd.conf 详解
- 项目发布错误的解决方法
- 剑指offer 算法 (分解让复杂问题简单)