请问怎么配置 gate模块中客户端消息路由?
发布于 6 个月前 作者 theheros 449 次浏览 来自 问答

GateModuleRPC调用

gate模块中客户端消息路由时的取模字段会根据情况来定

如果userID已bind 那么会使用userID来取模 如果userID未bind 会使用gate的moduleID来取模

我看了一下文档上这样写,不知道我是否可以自己来写路由规则?

4 回复
  func ChatRoute( app module.App,Type string,hash string) (*module.ServerSession){
	  //演示多个服务路由 默认使用第一个Server
	  //log.Debug("Hash:%s 将要调用 type : %s",hash,Type)
	  servers:=app.GetServersByType(Type)
	  if len(servers)==0{
		  return nil
	  }
	  return servers[0]
  }
  app.Route("Chat",ChatRoute)		

这个函数可以让你自定义路由规则,不过提供给你选择的信息比较有限就一个hash string。

另外还有一个函数可以用来将指定格式的路由改成标准路由来访问 例如我想将Devildom:Tribe:100这样的非标准路由改为 Devildom@Devildom001/HD_Join

  app.SetMapRoute(func(app module.App,route string)string{
		  if strings.Contains(route,"Devildom:Tribe:"){
			  SvrSession, err:=app.GetRouteServer("Devildom-Dispatch","")
			  if err!=nil{
				  log.Warning("SetMapRoute error:%v",err.Error())
				  return route
			  }
			  newroute,errstr:=SvrSession.Call("Dispatch",nil,route,false)
			  if errstr!=""{
				  log.Warning("SetMapRoute error:%v",errstr)
				  return route
			  }
			  if newroute!=nil{
				  return newroute.(string)
			  }
		  }
		  return route
	  })

@liangdas 的确,app.Route() 达不到要求,不是到这个函数加入上session,和topic有是比较麻烦么?(我没看源代码,不好意思。。。) 还有,不知道您是是否有计划把更强大的路由功能加入?谢谢您的回答!

session 函数可能为null 所以没法做通用路由,其他方式的路由我目前还没有想好怎么做,主要还是需求推动吧。

Ok ,晓得了!我大致看了一下,我觉得稍微改变一下,可以满足我们的需求。感谢!

回到顶部