成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > golang實(shí)現(xiàn)簡(jiǎn)易的分布式系統(tǒng)方法

golang實(shí)現(xiàn)簡(jiǎn)易的分布式系統(tǒng)方法

熱門(mén)標(biāo)簽:西部云谷一期地圖標(biāo)注 地圖標(biāo)注的汽車(chē)標(biāo) 學(xué)海導(dǎo)航地圖標(biāo)注 高德地圖標(biāo)注口訣 南通如皋申請(qǐng)開(kāi)通400電話(huà) 中國(guó)地圖標(biāo)注省會(huì)高清 浙江高速公路地圖標(biāo)注 廣州呼叫中心外呼系統(tǒng) 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng)

本文介紹了golang實(shí)現(xiàn)簡(jiǎn)易的分布式系統(tǒng)方法,分享給大家,具體如下:

功能

  • 能夠發(fā)送/接收請(qǐng)求和響應(yīng)
  • 能夠連接到集群
  • 如果無(wú)法連接到群集(如果它是第一個(gè)節(jié)點(diǎn)),則可以作為主節(jié)點(diǎn)啟動(dòng)節(jié)點(diǎn)
  • 每個(gè)節(jié)點(diǎn)有唯一的標(biāo)識(shí)
  • 能夠在節(jié)點(diǎn)之間交換json數(shù)據(jù)包
  • 接受命令行參數(shù)中的所有信息(將來(lái)在我們系統(tǒng)升級(jí)時(shí)將會(huì)很有用)

源碼

package main

import (
  "fmt"
  "strconv"
  "time"
  "math/rand"
  "net"
  "flag"
  "strings"
  "encoding/json"
)

// 節(jié)點(diǎn)數(shù)據(jù)信息
type NodeInfo struct {

  // 節(jié)點(diǎn)ID,通過(guò)隨機(jī)數(shù)生成
  NodeId int `json:"nodeId"`
  // 節(jié)點(diǎn)IP地址
  NodeIpAddr string `json:"nodeIpAddr"`
  // 節(jié)點(diǎn)端口
  Port string `json: "port"`
}

// 將節(jié)點(diǎn)數(shù)據(jù)信息格式化輸出
//NodeInfo:{nodeId: 89423,nodeIpAddr: 127.0.0.1/8,port: 8001}
func (node *NodeInfo) String() string {

  return "NodeInfo:{ nodeId:" + strconv.Itoa(node.NodeId) + ",nodeIpAddr:" + node.NodeIpAddr + ",port:" + node.Port + "}"
}

/* 添加一個(gè)節(jié)點(diǎn)到集群的一個(gè)請(qǐng)求或者響應(yīng)的標(biāo)準(zhǔn)格式 */
type AddToClusterMessage struct {
  // 源節(jié)點(diǎn)
  Source NodeInfo `json:"source"`
  // 目的節(jié)點(diǎn)
  Dest NodeInfo `json:"dest"`
  // 兩個(gè)節(jié)點(diǎn)連接時(shí)發(fā)送的消息
  Message string `json:"message"`
}

/* Request/Response 信息格式化輸出 */
func (req AddToClusterMessage) String() string {
  return "AddToClusterMessage:{\n source:" + req.Source.String() + ",\n dest: " + req.Dest.String() + ",\n message:" + req.Message + " }"
}

// cat vi go
// rm

func main() {

  // 解析命令行參數(shù)
  makeMasterOnError := flag.Bool("makeMasterOnError", false, "如果IP地址沒(méi)有連接到集群中,我們將其作為Master節(jié)點(diǎn).")
  clusterip := flag.String("clusterip", "127.0.0.1:8001", "任何的節(jié)點(diǎn)連接都連接這個(gè)IP")
  myport := flag.String("myport", "8001", "ip address to run this node on. default is 8001.")
  flag.Parse() //解析

  fmt.Println(*makeMasterOnError)
  fmt.Println(*clusterip)
  fmt.Println(*myport)

  /* 為節(jié)點(diǎn)生成ID */
  rand.Seed(time.Now().UTC().UnixNano()) //種子
  myid := rand.Intn(99999999) // 隨機(jī)

  //fmt.Println(myid)

  // 獲取IP地址
  myIp,_ := net.InterfaceAddrs()
  fmt.Println(myIp[0])

  // 創(chuàng)建NodeInfo結(jié)構(gòu)體對(duì)象
  me := NodeInfo{NodeId: myid, NodeIpAddr: myIp[0].String(), Port: *myport}
  // 輸出結(jié)構(gòu)體數(shù)據(jù)信息
  fmt.Println(me.String())
  dest := NodeInfo{ NodeId: -1, NodeIpAddr: strings.Split(*clusterip, ":")[0], Port: strings.Split(*clusterip, ":")[1]}

  /* 嘗試連接到集群,在已連接的情況下并且向集群發(fā)送請(qǐng)求 */
  ableToConnect := connectToCluster(me, dest)

  /*
   * 監(jiān)聽(tīng)其他節(jié)點(diǎn)將要加入到集群的請(qǐng)求
   */
  if ableToConnect || (!ableToConnect  *makeMasterOnError) {
    if *makeMasterOnError {fmt.Println("Will start this node as master.")}
    listenOnPort(me)
  } else {
    fmt.Println("Quitting system. Set makeMasterOnError flag to make the node master.", myid)
  }

}

/*
 * 這是發(fā)送請(qǐng)求時(shí)格式化json包有用的工具
 * 這是非常重要的,如果不經(jīng)過(guò)數(shù)據(jù)格式化,你最終發(fā)送的將是空白消息
 */
func getAddToClusterMessage(source NodeInfo, dest NodeInfo, message string) (AddToClusterMessage){
  return AddToClusterMessage{
    Source: NodeInfo{
      NodeId: source.NodeId,
      NodeIpAddr: source.NodeIpAddr,
      Port: source.Port,
    },
    Dest: NodeInfo{
      NodeId: dest.NodeId,
      NodeIpAddr: dest.NodeIpAddr,
      Port: dest.Port,
    },
    Message: message,
  }
}

func connectToCluster(me NodeInfo, dest NodeInfo) (bool){
  /* 連接到socket的相關(guān)細(xì)節(jié)信息 */
  connOut, err := net.DialTimeout("tcp", dest.NodeIpAddr + ":" + dest.Port, time.Duration(10) * time.Second)
  if err != nil {
    if _, ok := err.(net.Error); ok {
      fmt.Println("未連接到集群.", me.NodeId)
      return false
    }
  } else {
    fmt.Println("連接到集群. 發(fā)送消息到節(jié)點(diǎn).")
    text := "Hi nody.. 請(qǐng)?zhí)砑游业郊?."
    requestMessage := getAddToClusterMessage(me, dest, text)
    json.NewEncoder(connOut).Encode(requestMessage)

    decoder := json.NewDecoder(connOut)
    var responseMessage AddToClusterMessage
    decoder.Decode(responseMessage)
    fmt.Println("得到數(shù)據(jù)響應(yīng):\n" + responseMessage.String())

    return true
  }
  return false
}

func listenOnPort(me NodeInfo){
  /* 監(jiān)聽(tīng)即將到來(lái)的消息 */
  ln, _ := net.Listen("tcp", fmt.Sprint(":" + me.Port))
  /* 接受連接 */
  for {
    connIn, err := ln.Accept()
    if err != nil {
      if _, ok := err.(net.Error); ok {
        fmt.Println("Error received while listening.", me.NodeId)
      }
    } else {
      var requestMessage AddToClusterMessage
      json.NewDecoder(connIn).Decode(requestMessage)
      fmt.Println("Got request:\n" + requestMessage.String())

      text := "Sure buddy.. too easy.."
      responseMessage := getAddToClusterMessage(me, requestMessage.Source, text)
      json.NewEncoder(connIn).Encode(responseMessage)
      connIn.Close()
    }
  }
}

運(yùn)行程序

/Users/liyuechun/go
liyuechun:go yuechunli$ go install main
liyuechun:go yuechunli$ main
My details: NodeInfo:{ nodeId:53163002, nodeIpAddr:127.0.0.1/8, port:8001 }
不能連接到集群. 53163002
Quitting system. Set makeMasterOnError flag to make the node master. 53163002
liyuechun:go yuechunli$

獲取相關(guān)幫助信息

$ ./bin/main -h
liyuechun:go yuechunli$ ./bin/main -h
Usage of ./bin/main:
 -clusterip string
    ip address of any node to connnect (default "127.0.0.1:8001")
 -makeMasterOnError
    make this node master if unable to connect to the cluster ip provided.
 -myport string
    ip address to run this node on. default is 8001. (default "8001")
liyuechun:go yuechunli$

啟動(dòng)Node1主節(jié)點(diǎn)

$ ./bin/main --makeMasterOnError
liyuechun:go yuechunli$ ./bin/main --makeMasterOnError
My details: NodeInfo:{ nodeId:82381143, nodeIpAddr:127.0.0.1/8, port:8001 }
未連接到集群. 82381143
Will start this node as master.

添加節(jié)點(diǎn)Node2到集群

$ ./bin/main --myport 8002 --clusterip 127.0.0.1:8001

添加節(jié)點(diǎn)Node3到集群

main --myport 8004 --clusterip 127.0.0.1:8001

添加節(jié)點(diǎn)Node4到集群

$ main --myport 8003 --clusterip 127.0.0.1:8002

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • GO語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的目錄復(fù)制功能
  • Go語(yǔ)言實(shí)現(xiàn)互斥鎖、隨機(jī)數(shù)、time、List
  • Golang獲取當(dāng)前時(shí)間代碼
  • Golang字符串的拼接方法匯總
  • Go語(yǔ)言中 Channel 詳解
  • go語(yǔ)言中strings包的用法匯總
  • Golang中的變量學(xué)習(xí)小結(jié)
  • Golang中的自定義函數(shù)詳解
  • 在Go中復(fù)制文件最流行的3種方法

標(biāo)簽:貴州 東營(yíng) 德宏 許昌 吐魯番 保定 曲靖 常州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang實(shí)現(xiàn)簡(jiǎn)易的分布式系統(tǒng)方法》,本文關(guān)鍵詞  golang,實(shí)現(xiàn),簡(jiǎn)易,的,分布式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang實(shí)現(xiàn)簡(jiǎn)易的分布式系統(tǒng)方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang實(shí)現(xiàn)簡(jiǎn)易的分布式系統(tǒng)方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    在线观看网站免费入口在线观看国内| 精品一区二区av| 上原亚衣av一区二区三区| 91在线品视觉盛宴免费| 丝袜美腿美女被狂躁在线观看| 一区二区三区午夜探花| 亲爱的老师9免费观看全集电视剧| 日韩欧美在线视频日韩欧美在线视频| 亚洲码欧美码一区二区三区| 妺妺窝人体色www婷婷| 另类小说第一页| 国产伊人久久| 亚洲大胆视频| √天堂中文官网8在线| 免费一级淫片aaa片毛片a级| 国产伦精品一区二区三区四区视频| 精品免费一区二区三区| 欧美日本在线观看| 国产美女久久久久| 日韩欧美一级片| 国产98在线|日韩| 欧美日韩一区二区区| 午夜亚洲福利老司机| 国产一区二区久久精品| 在线中文字幕不卡| 牛牛精品在线| 黑人巨大精品欧美一区二区三区| 91精品综合久久久久久| 毛片网站在线观看| 青青草原成人| 可以免费看的av毛片| 日韩欧美精品一区二区三区经典| 日韩乱码人妻无码中文字幕久久| 欧美图片激情小说| 国产一级做a爱片久久毛片a| 日韩av在线播放中文字幕| 国产一区二区日韩精品欧美精品| 亚洲人成在线电影| 欧美第一页在线| 91电影在线| 免费在线观看视频a| 四虎成人免费电影| 四虎精品永久免费| 国产精品69一区二区三区| 国产精品网站大全| 亚洲精美色品网站| 国内精品视频一区二区三区八戒| 高清精品一区二区三区一区| 色偷偷男人天堂| 欧美一区二区三区系列电影| 青娱乐精品在线视频| 爱爱视频网站| 91啦中文在线观看| 黄页免费欧美| 偷拍视频一区二区| 91国偷自产一区二区三区的观看方式| 欧美亚洲精品日韩| 色综合久久九月婷婷色综合| 一二三四社区欧美黄| 91网址在线观看| 欧美又大又硬又粗bbbbb| 亚洲天堂a在线| 99免费在线观看视频| 国产在线视频精品视频免费看| 1stkiss在线漫画| 精品中文字幕久久久久久| 亚洲黄色尤物视频| 任我爽精品视频在线播放| 亚洲一区二区视频在线观看| 91精品一区二区三区四区| 日本一区二区久久精品| 三级黄色录像视频| 亚洲国产精品一区制服丝袜| 欧美日韩**字幕一区| 免费在线中文字幕| 久久性爱视频网站| 岛国av免费在线| 国产美女99p| 国产精品国产精品| 国产在线精品播放| 高清一区二区三区日本久| 亚洲第一精品夜夜躁人人爽| 日韩亚洲欧美一区二区三区| 99精品在线免费在线观看| 成人99免费视频| 午夜成人亚洲理伦片在线观看| 中国女人内谢69视频| 国产精品欧美亚洲| 日本一区二区三区久久| 91国偷自产一区二区三区的观看方式| 午夜91在线| 国产视频一区不卡| 色视频线观看在线播放| 日本免费在线观看视频| 97国产精品视频人人做人人爱| 麻豆精品国产| 91在线在线观看| 国产综合精品一区| 欧美在线亚洲在线| 久热在线视频| 韩国精品视频在线观看| 老司机2019福利精品视频导航| www.17c.com喷水少妇| 色88888久久久久久影院野外| www.98色噜噜噜| 国产精品一二一区| 国产精品最新自拍| 韩国女主播成人在线| 国产电影精品久久禁18| 久久综合精品国产一区二区三区| 天天干天天干天天干| 成片免费观看视频| 美女搞黄视频在线观看| 人人爽久久涩噜噜噜网站| 国产一区二区三区在线观看视频| 久久福利毛片| 99视频在线观看地址| www.夜夜爽| 视频小说一区二区| 91精品久久久久久蜜桃| 成年人在线视频| 亚洲亚裔videos黑人hd| www.国产一区二区| 精品一区二区精品| 亚洲人成电影网站色mp4| 国产一区二区视频在线播放| 久久爱一区二区| 2025韩国理伦片在线观看| 欧美日韩久久| 欧美在线观看视频一区二区三区| 四虎成人影院网址| 欧美成人精品免费| 国产精品久久久久久久久果冻传媒| 日韩欧美激情四射| 欧美日产国产成人免费图片| 伊人精品在线观看| 色噜噜久久综合伊人一本| 极品美妇后花庭翘臀娇吟小说| 欧美亚洲免费| 26uuu另类亚洲欧美日本一| 97人人澡人人爽| 九九在线视频| av在线精品| 中文字幕亚洲综合久久五月天色无吗''| 五月精品在线| 天天摸夜夜操| 国内一级毛片| 国产高清视频免费在线观看| 最好看的中文字幕久久| 人妻熟人中文字幕一区二区| 国产又黄又大久久| 午夜精品福利视频网站| 一区精品视频| 国产午夜麻豆影院在线观看| 日韩电影网站| 99热久久这里只有精品| 成人影院一区二区三区| 国产精品久久久久三级| 制服 丝袜 综合 日韩 欧美| 成年丰满熟妇午夜免费视频| 国产亚洲黄色片| 欧美日韩国产免费一区二区| 欧美专区18| 色呦呦在线观看视频| 亚洲丝袜美腿一区| 精品国产乱码一区二区三区四区| 亚洲激情视频在线播放| 最近中文字幕免费在线观看| 成人影院午夜久久影院| 久久久电影一区二区三区| 一区二区三区成人精品| 日韩av在线一区二区| 国产aⅴ激情无码久久久无码| 成人精品一区二区三区| 高清欧美电影在线| 欧美日韩成人免费| 婷婷成人综合| 可以免费观看的黄色网址| 国产麻豆免费观看| 亚洲国产欧美一区二区丝袜黑人| 国产爆初菊在线观看免费视频网站| www精品国产| 国语对白精品一区二区| 国产伦精品一区二区三区视频青涩| 日韩欧美在线影院| 四虎永久国产精品| 欧美日韩dvd| 日韩欧美资源站| 极品美乳网红视频免费在线观看| 亚州欧美一区三区三区在线| 欧美成人福利| 亚洲三区在线| 中文字幕网站在线观看| www.老鸭窝.com| 日本www在线观看视频| 一级特黄大欧美久久久| 欧美成人午夜77777| 亚洲天堂中文网| 欧美不卡1区2区3区| 嫩草影院发布页| 久热精品视频在线免费观看| 国产一区视频免费观看| 天堂电影在线| 午夜视频1000| 日韩国产成人精品| 6080亚洲理论片在线观看| 欲香欲色天天天综合和网| 91精品国产91久久久久游泳池| 精品magnet| 成人mm视频在线观看| 99精品国产在热久久下载| 97人人模人人爽视频一区二区| 在线视频日韩一区| 日本三级片在线观看| 在线手机中文字幕| 国产免费又粗又猛又爽| 99久久久精品免费观看国产| 欧美特黄视频| 色的视频在线免费看| jizzjizzjizz中国免费| 毛毛毛毛毛毛毛片123| 色欧美88888久久久久久影院| 乱色精品无码一区二区国产盗| 国产剧情在线观看一区| 欧美一区在线观看视频| www国产精品内射老熟女| h片在线观看视频免费| 99久久99久久精品免费| av免费在线不卡| 日本综合字幕| 久久国产中文字幕| 成人免费视频播放| 国 产 黄 色 大 片| 久久久久久久性| 午夜网站在线观看| 久久婷婷人人澡人人喊人人爽| 偷拍欧美精品| 九色在线视频观看| 国产日韩精品久久久| 2023av视频| 好吊色一区二区三区| 制服.丝袜.亚洲.中文.综合| 美日韩一区二区三区| 亚洲精品套图| 成人有码视频在线播放| 亚洲精品久久久久久下一站| 在线观看免费版| 欧美挤奶吃奶水xxxxx| 综合国产在线观看| 亚洲精品中文字幕女同| 国产99在线 | 亚洲| 久久人妻少妇嫩草av蜜桃| 蜜乳av一区二区三区| 欧美性高潮床叫视频| 精品国产_亚洲人成在线| 粉嫩av四季av绯色av第一区| 国产免费一区二区三区四在线播放| 91麻豆精品国产91久久| 明星裸体视频一区二区| 国产理论电影在线| 在线观看免费国产成人软件| 欧美日韩高清不卡| 日本一欧美一欧美一亚洲视频| 国产对白国语对白| 黄色动漫网站| 在线a免费看| 精品国产av 无码一区二区三区| 污黄视频在线看| 欧美激情在线免费观看| 成人免费性视频| 亚洲精品高清无码视频| 国产传媒一区在线| 欧美色综合一区二区三区| 日韩欧美成人精品| 日韩精品一级毛片在线播放| 日韩欧美视频第二区| 成年免费网站| 国产精品视频久久久久久久| 亚洲国产综合视频| 中文字幕色av一区二区三区| 91麻豆成人精品国产免费网站| 久久99精品久久久久久久久久| 国产成人免费高清| 国产麻豆xxxvideo实拍| 日韩电影一区二区三区四区| 黄色成人在线看| 91tv国产成人福利| 91av在线免费观看视频| 91porny在线| 亚洲日本视频在线| 午夜精品久久久久久久99热| 在线亚洲天堂| 久久久久久91亚洲精品中文字幕| 麻豆精品久久久久久久99蜜桃| 在线a人片免费观看视频| 国模一区二区三区私拍视频| 亚洲成va人在线观看| 久久久久久国产| 激情文学综合| 欧美福利视频一区二区| 精品在线观看视频| 性欧美精品男男| 99精品国产在热久久婷婷| 色综合久久精品| 祥仔av免费一区二区三区四区| www操com| 午夜黄色小视频| 手机在线成人免费视频| 国产精品无码无卡无需播放器| 美日韩丰满少妇在线观看| 一级全黄肉体裸体全过程| 91视频论坛| 激情视频一区二区三区| 日韩精品亚洲一区二区三区免费| 国产亚洲精品久久久久久移动网络| 亚洲免费av观看| 在线亚洲天堂| 欧美在线视频网| 精品写真视频在线观看| 久久综合九色综合网站| 污黄色在线观看| 在线观看精品一区二区三区| 无码人妻丰满熟妇区毛片蜜桃精品| 日本a口亚洲| 奇米一区二区三区| 日韩不卡一二三区| 国模一区二区三区白浆| 亚洲成人在线网站|