性能优化

一、性能优化

  1. 锁的频次(降低锁的频次,就比如群聊的时候使用的协程)
  2. json编码次数(降低JSON编码次数,能不编码尽量不编码)
  3. 静态资源分离(静态资源与应用资源进行分离,存储到alioss)

二、下载OSS的SDK

  1. func UploadOss(writer http.ResponseWriter,
  2. request * http.Request){
  3. }

如何安装

go get github.com/aliyun/aliyun-oss-go-sdk/oss

26、性能优化 - 图1

如果报错,尝试以下解决方案:

golang.org/x/time/rate

cd $GOPATH/src/golang.org/x/

git clone https://github.com/golang/time.git time

三、实现OSS上传

  1. // 阿里云OSS相关配置信息(更换为你自己的信息)
  2. const (
  3. AccessKeyId = "LTAI5tNcWCJ7zUKreUsj"
  4. AccessKeySecret = "GqEe5awgoSzBL2eXtEBRSKSmkwU"
  5. EndPoint = "oss-cn-shanghai.aliyuncs.com"
  6. Bucket = "golags"
  7. )
  8. // 权限设置为公共读状态(在阿里后台网页设置读写权限)
  9. // 需要安装
  10. func UploadOss(writer http.ResponseWriter, request *http.Request) {
  11. //todo 获得上传的文件
  12. srcfile, head, err := request.FormFile("file")
  13. if err != nil {
  14. util.RespFail(writer, err.Error())
  15. return
  16. }
  17. //todo 获得文件后缀.png/.mp3
  18. suffix := ".png"
  19. //如果前端文件名称包含后缀 xx.xx.png
  20. ofilename := head.Filename
  21. tmp := strings.Split(ofilename, ".")
  22. if len(tmp) > 1 {
  23. suffix = "." + tmp[len(tmp)-1]
  24. }
  25. //如果前端指定filetype
  26. //formdata.append("filetype",".png")
  27. filetype := request.FormValue("filetype")
  28. if len(filetype) > 0 {
  29. suffix = filetype
  30. }
  31. //todo 初始化ossclient
  32. client, err := oss.New(EndPoint, AccessKeyId, AccessKeySecret)
  33. if err != nil {
  34. util.RespFail(writer, err.Error())
  35. return
  36. }
  37. //todo 获得bucket
  38. bucket, err := client.Bucket(Bucket)
  39. if err != nil {
  40. util.RespFail(writer, err.Error())
  41. return
  42. }
  43. //todo 设置文件名称
  44. //time.Now().Unix()
  45. //mnt 先当于我们的子目录一样
  46. filename := fmt.Sprintf("mnt/%d%04d%s",
  47. time.Now().Unix(), rand.Int31(),
  48. suffix)
  49. //todo 通过bucket上传
  50. err = bucket.PutObject(filename, srcfile)
  51. if err != nil {
  52. util.RespFail(writer, err.Error())
  53. return
  54. }
  55. //todo 获得url地址
  56. url := "http://" + Bucket + "." + EndPoint + "/" + filename
  57. //todo 响应到前端
  58. util.RespOk(writer, url, "")
  59. }

四、测试云存储是否成功

26、性能优化 - 图2