源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

服务器端Go程序对长短链接的处理及运行参数的保存

  • 时间:2022-06-21 19:45 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:服务器端Go程序对长短链接的处理及运行参数的保存
[b]对长、短连接的处理策略(模拟心跳) [/b]作为一个可能会和很多Client进行通讯交互的Server,首先要保证的就是整个Server运行状态的稳定性,因此在和Client建立连接通讯的时候,确保连接的及时断开非常重要,否则一旦和多个客户端建立不关闭的长连接,对于服务器资源的占用是很可怕的。因此,我们需要针对可能出现的短连接和长连接,设定不同的限制策略。     针对短连接,我们可以使用golang中的net包自带的timeout函数,一共有三个,分别是:
[url=http://yaml.org]yaml官网[/url]    比如我们可以将Server监听的端口作为变量,写入配置文件 config.yaml 和 config.xml,放入代码的根目录下,这样当我们想要更换服务器端口的时候,只要在配置文件中修改port对应的值就可以拉。 config.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> 
<Config1>GetConfig</Config1> 
<Config2>THE</Config2> 
<Config3>Information</Config3> 
<Feature1>HereIsTEST1</Feature1> 
<Feature2>1024</Feature2> 
<Feature3>Feature23333</Feature3> 

config.yaml内容如下:
Address: 172.168.0.1 
Config1: Easy 
Config2: 
 Feature1: 2 
 Feature2: [3, 4] 
Port: :6060 
Config4: IS 
Config5: ATest 

接下来就是解析他们了,目前golang官方还没有解析yaml的库,因此我推荐使用第三方的go-yaml包, 地址如下:  go-yaml  ,go get安装该包后,我们就可以通过他解析文件啦:
[u]复制代码[/u] 代码如下:
//解析文件,取出所有参数  func GetYamlConfig() map[interface{}]interface{}{        data, err := ioutil.ReadFile("config.yaml")      //将解析出的参数转为map的形式      m := make(map[interface{}]interface{})      if err != nil {          LogErr("error: %v", err)      }      err = yaml.Unmarshal([]byte(data), &m)        return m  }  //根据需求取出对应值  func GetElement(key string,themap map[interface{}]interface{})string {      if value,ok:=themap[key];ok {          return value.(string)      }        LogErr("Can't find the *.yaml")      return ""  } 
这里同样给出解析xml配置文件的代码:
[u]复制代码[/u] 代码如下:
func GetXMLConfig() map[string]string {        var t xml.Token      var err error        Keylst := make([]string,6)      Valuelst:=make([]string,6)  //将解析出的元素填入map中,便于查找      map1:=make(map[string]string)      content, err := ioutil.ReadFile("config.xml")      CheckError(err)      decoder := xml.NewDecoder(bytes.NewBuffer(content))        i:=0      j:=0      for t, err = decoder.Token(); err == nil; t, err = decoder.Token() {            switch token := t.(type) {          // 处理元素          case xml.StartElement:                name := token.Name.Local              Keylst[i]=string(name)              i=i+1            case xml.CharData:              content1 := string([]byte(token))              //Valuelst=append(Valuelst,content1)              Valuelst[j]=content1              j=j+1            }      }      for count:=0;count<len(Keylst);count++{          map1[Keylst[count]]=Valuelst[count]      }        return map1  }  //取出map的函数跟yaml中的差不多,此处略过 
运行效果如下: [img]http://files.jb51.net/file_images/article/201603/2016310155058155.png?2016210155115[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部