本文整理汇总了Golang中github.com/Terry-Mao/gopush-cluster/rpc.GetComet函数的典型用法代码示例。如果您正苦于以下问题:Golang GetComet函数的具体用法?Golang GetComet怎么用?Golang GetComet使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetComet函数的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: GetServer2
// GetServer2 handle for server get.
func GetServer2(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "Method Not Allowed", 405)
return
}
params := r.URL.Query()
key := params.Get("k")
callback := params.Get("cb")
protoStr := params.Get("p")
res := map[string]interface{}{"ret": OK}
defer retWrite(w, r, res, callback, time.Now())
if key == "" {
res["ret"] = ParamErr
return
}
// Match a push-server with the value computed through ketama algorithm
node := myrpc.GetComet(key)
if node == nil {
res["ret"] = NotFoundServer
return
}
addrs, ret := getProtoAddr(node, protoStr)
if ret != OK {
res["ret"] = ret
return
}
// give client a addr list, client do the best choice
res["data"] = map[string]interface{}{"server": addrs}
return
}
开发者ID:xuguangtech,项目名称:gopush-cluster,代码行数:31,代码来源:handle_1.0.go
示例2: PushPrivate
// PushPrivate handle for push private message.
func PushPrivate(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "Method Not Allowed", 405)
return
}
body := ""
res := map[string]interface{}{"ret": OK}
defer retPWrite(w, r, res, &body, time.Now())
// param
bodyBytes, err := ioutil.ReadAll(r.Body)
if err != nil {
res["ret"] = ParamErr
glog.Errorf("ioutil.ReadAll() failed (%s)", err.Error())
return
}
body = string(bodyBytes)
params := r.URL.Query()
key := params.Get("key")
expireStr := params.Get("expire")
if key == "" {
res["ret"] = ParamErr
return
}
expire, err := strconv.ParseUint(expireStr, 10, 32)
if err != nil {
res["ret"] = ParamErr
glog.Errorf("strconv.ParseUint(\"%s\", 10, 32) error(%v)", expireStr, err)
return
}
node := myrpc.GetComet(key)
if node == nil || node.CometRPC == nil {
res["ret"] = NotFoundServer
return
}
client := node.CometRPC.Get()
if client == nil {
res["ret"] = NotFoundServer
return
}
rm := json.RawMessage(bodyBytes)
msg, err := rm.MarshalJSON()
if err != nil {
res["ret"] = ParamErr
glog.Errorf("json.RawMessage(\"%s\").MarshalJSON() error(%v)", body, err)
return
}
args := &myrpc.CometPushPrivateArgs{Msg: json.RawMessage(msg), Expire: uint(expire), Key: key}
ret := 0
if err := client.Call(myrpc.CometServicePushPrivate, args, &ret); err != nil {
glog.Errorf("client.Call(\"%s\", \"%s\", &ret) error(%v)", myrpc.CometServicePushPrivate, args.Key, err)
res["ret"] = InternalErr
return
}
return
}
开发者ID:youynu,项目名称:gopush-cluster,代码行数:56,代码来源:admin.go
示例3: GetServer
// GetServer handle for server get
func GetServer(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "Method Not Allowed", 405)
return
}
params := r.URL.Query()
key := params.Get("k")
callback := params.Get("cb")
protoStr := params.Get("p")
res := map[string]interface{}{"ret": OK}
defer retWrite(w, r, res, callback, time.Now())
if key == "" {
res["ret"] = ParamErr
return
}
proto, err := strconv.Atoi(protoStr)
if err != nil {
glog.Errorf("strconv.Atoi(\"%s\") error(%v)", protoStr, err)
res["ret"] = ParamErr
return
}
// Match a push-server with the value computed through ketama algorithm
node := myrpc.GetComet(key)
if node == nil {
res["ret"] = NotFoundServer
return
}
addrs := node.Addr[proto]
if addrs == nil || len(addrs) == 0 {
res["ret"] = NotFoundServer
return
}
server := ""
// Select the best ip
if Conf.Router != "" {
var ips []string
for _, addr := range addrs {
ips = append(ips, addr.Addr)
}
server = routerCN.SelectBest(r.RemoteAddr, ips)
glog.V(1).Infof("select the best ip:\"%s\" match with remoteAddr:\"%s\" , from ip list:\"%v\"", server, r.RemoteAddr, ips)
}
if server == "" {
glog.V(1).Infof("remote addr: \"%s\" chose the ip: \"%s\"", r.RemoteAddr, addrs[0].Addr)
server = addrs[0].Addr
}
res["data"] = map[string]interface{}{"server": server}
return
}
开发者ID:jixieshi999,项目名称:gopush-cluster,代码行数:50,代码来源:handle_1.0.go
示例4: PushMultiPrivate
// PushMultiPrivate handle for push multiple private messages.
// Because of it`s going asynchronously in this method, so it won`t return a InternalErr to caller.
func PushMultiPrivate(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "Method Not Allowed", 405)
return
}
body := ""
res := map[string]interface{}{"ret": OK}
defer retPWrite(w, r, res, &body, time.Now())
// post param
bodyBytes, err := ioutil.ReadAll(r.Body)
if err != nil {
res["ret"] = InternalErr
log.Error("ioutil.ReadAll() failed (%v)", err)
return
}
body = string(bodyBytes)
msgBytes, keys, ret := parseMultiPrivate(bodyBytes)
if ret != OK {
res["ret"] = ret
return
}
rm := json.RawMessage(msgBytes)
msg, err := rm.MarshalJSON()
if err != nil {
res["ret"] = ParamErr
log.Error("json.RawMessage(\"%s\").MarshalJSON() error(%v)", string(msg), err)
return
}
// url param
params := r.URL.Query()
expire, err := strconv.ParseUint(params.Get("expire"), 10, 32)
if err != nil {
res["ret"] = ParamErr
log.Error("strconv.ParseUint(\"%s\", 10, 32) error(%v)", params.Get("expire"), err)
return
}
// match nodes
nodes := map[*myrpc.CometNodeInfo]*[]string{}
for i := 0; i < len(keys); i++ {
node := myrpc.GetComet(keys[i])
if node == nil || node.Rpc == nil {
res["ret"] = NotFoundServer
return
}
keysTmp, ok := nodes[node]
if ok {
*keysTmp = append(*keysTmp, keys[i])
} else {
nodes[node] = &([]string{keys[i]})
}
}
var fKeys []string
//push to every node
for cometInfo, ks := range nodes {
client := cometInfo.Rpc.Get()
if client == nil {
log.Error("cannot get comet rpc client")
fKeys = append(fKeys, *ks...)
continue
}
args := &myrpc.CometPushPrivatesArgs{Msg: json.RawMessage(msg), Expire: uint(expire), Keys: *ks}
resp := myrpc.CometPushPrivatesResp{}
if err := client.Call(myrpc.CometServicePushPrivates, args, &resp); err != nil {
log.Error("client.Call(\"%s\", \"%v\", &ret) error(%v)", myrpc.CometServicePushPrivates, args.Keys, err)
fKeys = append(fKeys, *ks...)
continue
}
log.Debug("fkeys len(%d) addr:%v", len(resp.FKeys), cometInfo.RpcAddr)
fKeys = append(fKeys, resp.FKeys...)
}
res["ret"] = OK
if len(fKeys) != 0 {
res["data"] = map[string]interface{}{"fk": fKeys}
}
return
}
开发者ID:Terry-Mao,项目名称:gopush-cluster,代码行数:78,代码来源:admin.go
注:本文中的github.com/Terry-Mao/gopush-cluster/rpc.GetComet函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论