Ai
1 Star 0 Fork 30

陈先乐/erpc

forked from andeyalee/erpc 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
server.go 1.71 KB
一键复制 编辑 原始数据 按行查看 历史
andeyalee 提交于 2018-12-11 18:21 +08:00 . refactor: refactor message
package main
import (
"encoding/json"
"time"
"github.com/henrylee2cn/teleport/xfer/gzip"
tp "github.com/henrylee2cn/teleport"
)
//go:generate go build $GOFILE
func main() {
defer tp.FlushLogger()
gzip.Reg('g', "gizp", 5)
go tp.GraceSignal()
// tp.SetReadLimit(10)
tp.SetShutdown(time.Second*20, nil, nil)
var peer = tp.NewPeer(tp.PeerConfig{
SlowCometDuration: time.Millisecond * 500,
PrintDetail: true,
CountTime: true,
ListenPort: 9090,
})
group := peer.SubRoute("group")
group.RouteCall(new(Home))
peer.SetUnknownCall(UnknownCallHandle)
peer.ListenAndServe()
select {}
}
// Home controller
type Home struct {
tp.CallCtx
}
// Test handler
func (h *Home) Test(arg *map[string]interface{}) (map[string]interface{}, *tp.Rerror) {
h.Session().Push("/push/test", map[string]interface{}{
"your_id": string(h.PeekMeta("peer_id")),
})
h.VisitMeta(func(k, v []byte) {
tp.Infof("meta: key: %s, value: %s", k, v)
})
time.Sleep(5e9)
return map[string]interface{}{
"your_arg": *arg,
"server_time": time.Now(),
}, nil
}
// UnknownCallHandle handles unknown call message
func UnknownCallHandle(ctx tp.UnknownCallCtx) (interface{}, *tp.Rerror) {
time.Sleep(1)
var v = struct {
RawMessage json.RawMessage
Bytes []byte
}{}
codecID, err := ctx.Bind(&v)
if err != nil {
return nil, tp.NewRerror(1001, "bind error", err.Error())
}
tp.Debugf("UnknownCallHandle: codec: %d, RawMessage: %s, bytes: %s",
codecID, v.RawMessage, v.Bytes,
)
ctx.Session().Push("/push/test", map[string]interface{}{
"your_id": string(ctx.PeekMeta("peer_id")),
})
return map[string]interface{}{
"your_arg": v,
"server_time": time.Now(),
"meta": ctx.CopyMeta().String(),
}, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/chenxianle/erpc.git
git@gitee.com:chenxianle/erpc.git
chenxianle
erpc
erpc
v5.0.0

搜索帮助