当前位置: 首页 > news >正文

浅谈高校网站群的建设群晖wordpress外网

浅谈高校网站群的建设,群晖wordpress外网,安徽手机版建站系统,网页怎么建设HTTPPool 既可以是服务端#xff0c;也可以是客户端#xff0c;这取决于特定的使用场景和上下文#xff1a; 作为客户端#xff1a;当本地缓存没有找到需要的数据时#xff0c;HTTPPool 需要作为客户端#xff0c;通过 httpGetter #xff08;实现了 PeerGetter 接口也可以是客户端这取决于特定的使用场景和上下文 作为客户端当本地缓存没有找到需要的数据时HTTPPool 需要作为客户端通过 httpGetter 实现了 PeerGetter 接口去其他的远程节点服务端请求数据。作为服务端当其他节点的 HTTPPool 实例作为客户端请求当前节点存储的数据时当前节点的 HTTPPool 实例则作为服务端响应这些请求。 HTTPPool实现了PeerPicker接口httpGetter实现了PeerGetter接口前者用来找到对应的远程节点由于每个远程节点对应一个httpGetter因此实际找到的是httpGetter后者用来向远处节点请求数据 Peer.go package geetype PeerPicker interface {PickPeer(key string) (peer PeerGetter, ok bool) }type PeerGetter interface {Get(group string, key string) ([]byte, error) }PickerPeer用来找到key对应的远程节点远程节点和PeerGetter一一对应找到PeerGetter就找到对应的远程节点 PeerGetter根据group和key向远程节点获取数据 url.QueryEscape()net/url包用于将url中的特殊字符用asll码进行替换防止丢失 var _ PeerGetter (*httpGetter)(nil) 检验接口实现是否正确 day5需要实现http的客户端对于缓存未命中时需要向远程节点请求数据此时被作为客户端http.go中已经在day2实现了服务端的代码需要再加上客户端 HTTPPool实现了上面的PeerPicker接口实现了其需要实现的PickPeer()函数该函数返回远程节点对应的PeerGetter找到PeerGetter就能去访问远程节点的数据 // 查找PeerGetter func (p *HTTPPool) PickPeer(key string) (PeerGetter, bool) {p.mu.Lock()defer p.mu.Unlock()if peer : p.peers.Get(key); peer ! peer ! p.self {return p.httpGetters[peer], true}return nil, false } var _ PeerPicker (*HTTPPool)(nil) // 检验接口实现是否正确httpGetter实现了PeerGetter接口实现了其需要实现的Get()函数Get()函数主要是吊桶net/http中的Get()方法向远程节点请求数据并使用ioutil的ReadAll获取 func (h *httpGetter) Get(group string, key string) ([]byte, error) {u : fmt.Sprintf(%s%s%s,h.baseURL,url.QueryEscape(group),url.QueryEscape(key),)res, err : http.Get(u)if err ! nil {return nil, err}defer res.Body.Close()if res.StatusCode ! http.StatusOK {return nil, fmt.Errorf(error response body: %v, err)}bytes, err : ioutil.ReadAll(res.Body)if err ! nil {return nil, fmt.Errorf(error response body: %v, err)}return bytes, nil } var _ PeerGetter (*httpGetter)(nil) // 检验接口实现是否正确HTTPPool管理客户端的所有过程因此需要加入httpGetter属性其是一个map[string]*httpGetter类型通过key映射httpGetter同时加入day4中实现的一致性哈希过程由于这些需要实现互斥访问哈希表因此还需要一个mutex type HTTPPool struct {self stringbasePath stringmu sync.Mutexpeers *consistenthash.Map // 缓存值httpGetters map[string]*httpGetter // 每个httpGetter对应一个远程节点在缓存未命中时向远程节点请求数据 }最后将HTTPPool集成在主流程中即group中group需要实现RegisterPeer()函数将对应的HTTPPool注入同时封装getFromPeer()方法其中调用了之前的Get()方法用来请求远程节点的数据重写一下load()方法在不存在HTTPPool时才调用getLocally()否则调用getFromPeer type Group struct {name string // 缓存名称getter Getter // 回调函数mainCache cache // 缓存peers PeerPicker // 集成HTTPPool } // 将HTTPPool注入到group中 func (g *Group) RegisterPeers(peer PeerPicker) {if g.peers ! nil {panic(最多一个peerPicker)}g.peers peer }// 缓存未命中 向远程节点请求 func (g *Group) load(key string) (Value ByteView, err error) {if g.peers ! nil {if peer, ok : g.peers.PickPeer(key); ok {if value, err : g.getFromPeer(peer, key); err nil {return value, nil}log.Println(获取Peer失败)}}// 不存在远程节点 调用回调函数return g.getLocally(key) }// 向远处节点请求 func (g *Group) getFromPeer(peer PeerGetter, key string) (ByteView, error) {bytes, err : peer.Get(g.name, key)if err ! nil {return ByteView{}, err}return ByteView{b: bytes}, nil}因此流程如下 是 接收 key -- 检查是否被缓存 ----- 返回缓存值 ⑴| 否 是|----- 是否应当从远程节点获取 ----- 与远程节点交互 -- 返回缓存值 ⑵| 否|----- 调用回调函数获取值并添加到缓存 -- 返回缓存值 ⑶
http://www.hkea.cn/news/14392294/

相关文章:

  • 做更好的自己 网站网站设计就业岗位分析
  • wps可以做网站吗手机怎么做软件开发
  • 网站维护的方式有哪几种网址缩短链接
  • 网站流量查询网站统计查询校园网站建设成本
  • 免费的韩国网站服务器wordpress主题底部版权
  • 网站规划的案例好网站分享
  • 乐清手机网站建设人力资源网官网
  • 汕头网站关键词推广去哪里找空间做网站
  • 国外服务器做网站德阳定制建站网站建设制作
  • 锚文本外链网站找人做一个网站多少钱
  • 做网站一个月能挣多少钱网站页眉尺寸
  • 辽阳网站建设58网站页面框架设计
  • 做网页的网站素材wordpress搭建子网站
  • 网站备案有时间吗网络服务商英文简称
  • 游仙建设局官方网站做百度微信小程序都有哪些网站
  • 快递网站怎么做的延安做网站的公司电话
  • 网站建设及推广枣强知乎营销软件
  • 如何建立网站做微商xunsearch做搜索网站
  • 肥东建设局网站网站模板如何使用 如何修改吗
  • 跨境电商 网站开发邮件格式模板
  • 视频网站开发分析深圳华强北今晚
  • 商城网站模版网络运营工资大概多少
  • .net网站开发工程师太仓有专门做网站的地方吗
  • 深圳建设商城网站福田蒙派克油耗
  • 做类似于彩票的网站犯法吗用dw做网站怎么上传到网站上
  • 网站的关键词在哪里设置鞍山网站建设找金航
  • 做团购网站怎样赚钱北京梵客装饰
  • 太原要做网站的公司网站回头率
  • 兰州做网站维护的公司网站 一级域名 二级域名
  • 响应式企业网站开发所用的平台不花钱网站怎么做推广