liuxiaolong
2019-07-29 cc962c1b6ffabd9d41e6db0571efbcc1a4568ce7
use mangos req instead of deliver,add recv timeout
1个文件已修改
49 ■■■■ 已修改文件
service/FaceCompareService.go 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/FaceCompareService.go
@@ -3,13 +3,17 @@
import (
    esApi "basic.com/pubsub/esutil.git"
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/deliver.git"
    "encoding/json"
    "github.com/gogo/protobuf/proto"
    "github.com/satori/go.uuid"
    "nanomsg.org/go-mangos"
    "nanomsg.org/go-mangos/protocol/req"
    "nanomsg.org/go-mangos/transport/ipc"
    "nanomsg.org/go-mangos/transport/tcp"
    "sort"
    "strconv"
    "sync"
    "time"
    "webserver/extend/config"
    "webserver/extend/logger"
    "webserver/extend/util"
@@ -115,19 +119,12 @@
    resultList :=make([]CompareResult,0)
    for _,str :=range compServerList{
        reqUrl := "tcp://"+str
        reqClient := deliver.NewClient(deliver.ReqRep, reqUrl)
        err = reqClient.Send(b)
        if err !=nil{
            logger.Debug("reqClient.Send err:",err)
            continue
        }
        resultB, err := reqClient.Recv()
        if err !=nil{
            logger.Debug("reqClient.Recv err:",err)
        resultB := doCompareRequest(reqUrl,b)
        if resultB == nil || len(*resultB) ==0 {
            continue
        }
        rList :=make([]protomsg.Esinfo,0)
        err = json.Unmarshal(resultB, &rList)
        err = json.Unmarshal(*resultB, &rList)
        if err !=nil{
            logger.Debug("recv result Unmarshal err:", err)
            continue
@@ -148,6 +145,36 @@
    return co
}
func doCompareRequest(url string,args []byte) *[]byte{
    reqUrl := "tcp://"+url
    logger.Debug("reqUrl:",reqUrl)
    var sock mangos.Socket
    var err error
    var msg []byte
    if sock,err = req.NewSocket();err !=nil {
        logger.Debug("can't new req socket:%s",err.Error())
        return nil
    }
    sock.AddTransport(ipc.NewTransport())
    sock.AddTransport(tcp.NewTransport())
    sock.SetOption(mangos.OptionRecvDeadline, time.Second*10)
    if err = sock.Dial(url);err !=nil {
        logger.Debug("can't dial on req socket:%s",err.Error())
        return nil
    }
    if err = sock.Send(args);err !=nil {
        logger.Debug("can't send message on push socket:%s",err.Error())
        return nil
    }
    if msg,err = sock.Recv();err !=nil {
        logger.Debug("sock.Recv receive err:%s",err.Error())
        return nil
    }
    sock.Close()
    return &msg
}
//填充向前端返回的数据
func FillDataToCompareResult(rList *[]protomsg.Esinfo) []CompareResult {
    resultList :=make([]CompareResult,0)