亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

對等計算實踐:基于 IP 多播的發現

2019-11-18 13:26:29
字體:
來源:轉載
供稿:網友

  要完成有用的工作,P2P 應用程序中的對等點必須能夠彼此發現對方并與對方交互。在上一篇文章中,Todd 描述了幾種不同的機制,對等點可以使用這些機制彼此發現,他還解釋了每種機制的優缺點。本月,他提供了一種基于 ip 多播的發現的實現。
  在軟件實體能夠參與具有 P2P 應用程序特征的直接的對等交互之前,該實體必須發現將要與之交互的適當的對等點。所有可行的 P2P 體系結構都提供一種針對發現問題的解決方案。上一次,我們研究了實現發現的幾種不同的方法。本月,我將描述其中一種機制的實現。讓我們通過回顧來開始今天的討論。
  
  再訪發現
  對等點發現使 P2P 應用程序中的對等點能夠彼此定位以便相互之間可以交互。實現對等點發現服務有多種方法。最簡單的機制是顯式點到點配置。這種機制通過要求每個對等點知道所有它可能與之交互的其它對等點,并與它們相連,來進行工作。點到點配置的主要優點是簡單。它的主要缺點是缺乏靈活性并且缺少擴展到對等點的大型網絡的能力。
  
  發現的另一個公共模型是使用中心目錄作為中介。該模型在許多傳統的、非 P2P 分布式類型的應用程序中間很流行,其優點是很好理解。對等點向中心目錄注冊自己的存在,并使用中心目錄定位其它對等點。這種模型的主要優點是易于治理和擴展的能力。但是,其集中化設計會導致單點故障,因此它對自然力或網上沖浪人數增加所帶來的危害缺乏抵御能力。
  
  許多流行的 P2P 應用程序使用網絡模型而不是中心目錄,在網絡模型中,單個對等點只知道局域網絡上的對等點身份。每個對等點都作為那些與之相連的對等點的目錄。對等點通過向相鄰對等點傳播目錄查詢并返回相關的響應來進行合作。這種模型的主要優點是沒有集中化。它的主要缺點是由于傳播查詢耗費了大量的網絡和處理能力。
  
  上面三種機制有無數種變體。不討論這些變體了,讓我們繼續前進并研究另一種發現機制。
  
  IP 多播發現
  就每個對等點維護自己的目錄這點而言,多播模型類似于網絡模型。但是,對等點不通過合作來實現大規模網絡查詢。另外,對等點利用網絡本身提供的特性(IP 多播)來定位和標識其它對等點。
  
  IP 多播是無連接和不可靠的(不象 TCP/IP 是面向連接和可靠的)。雖然它使用 IP 數據報;但是不象單播 IP 數據報那樣是從一臺主機發送到另一臺主機,多播 IP 數據報可以同時發往多臺主機。
  
  對等點定期使用 IP 多播來公布自己的存在。公布包含了它們的主機名和一個用于正常通信的端口。對此消息感愛好的對等點檢測這個消息后,抽取出主機名和端口號,并使用該消息建立一個通信通道。
  
  回顧已經足夠了。讓我們開始研究代碼吧。
  
  簡單的客戶機與服務器
  我們將從一個簡單的示例開始,該示例演示了兩個進程如何使用 IP 多播進行通信。為了簡化演示,我將分別從客戶機和服務器進程這兩個方面來介紹示例。P2P 應用程序通常會實現這兩個進程,將它們劃分為客戶機或服務器并不輕易。
  
  在本例中,服務器進程進行循環并等待數據報包的到來。每接收到一個包,服務器就會向控制臺打印一條簡短的診斷消息??蛻魴C角色要簡單得多 — 它多播單個數據報包并退出。
  
  清單 1 和 2 說明了這兩部分是如何組合在一起的。代碼中的注釋說明了正在發生的事情。
  
  清單 1. 簡單服務器
  public
  class Server
  {
  public
  static
  void
  main(String [] arstring)
  {
  try
  {
  // Create a multicast datagram socket for receiving IP
  // multicast packets. Join the multicast group at
  // 230.0.0.1, port 7777.
  MulticastSocket multicastSocket = new MulticastSocket(7777);
  InetAddress inetAddress = InetAddress.getByName("230.0.0.1");
  multicastSocket.joinGroup(inetAddress);
  // Loop forever and receive messages from clients. PRint
  // the received messages.
  while (true)
  {
  byte [] arb = new byte [100];
  DatagramPacket datagramPacket = new DatagramPacket(arb, arb.length);
  multicastSocket.receive(datagramPacket);
  System.out.println(new String(arb));
  }
  }
  catch (Exception exception)
  {
  exception.printStackTrace();
  }
  }
  }
  
  
  
  
  清單 2. 簡單客戶機
  public
  class Client
  {
  public
  static
  void
  main(String [] arstring)
  {
  try
  {
  // Create a datagram package and send it to the multicast
  // group at 230.0.0.1, port 7777.
  byte [] arb = new byte [] {'h','e','l','l','o'};
  InetAddress inetAddress = InetAddress.getByName("230.0.0.1");
  DatagramPacket datagramPacket =
  new DatagramPacket(arb, arb.length, inetAddress, 7777);
  MulticastSocket multicastSocket = new MulticastSocket();
  multicastSocket.send(datagramPacket);
  }
  catch (Exception exception)
  {
  exception.printStackTrace();
  }
  }
  }
  
  
  
  
  java.net 包中的兩個類使它運行。java.net.DatagramPacket 類保存了 IP 數據報包中包含的數據。java.net.MulticastSocket 類創建一個調整到一個特定多播組的多播套接字。
  
  發現組件
  盡管上述示例是一個很好的 IP 多播的演示,但它沒有說明實現基于 IP 多播的對等點發現需要什么。要使它有用,我們需要一個功能不僅限于發送和接收包的軟件組件。理想情況下,這個組件將了解它所接收的包的源對等點,并適當地丟棄一些信息,這些信息是關于那些它認為已經消失、死亡或以其它方式離去的對等點的。
  
  在這個新設計中,對等點是一個多播組的成員。請牢記,發送到多播組的消息會透明地路由到該組的所有成員。
  
  設計包括兩個核心類和三個接口(我使用術語“接口”似乎不太嚴謹 — 在技術上是一個接口和兩個抽象類)。Member 類的實例是一個多播組的成員。這個類治理所有的通信細節。MemberManager 類的一個實例負責了解參與多播組的其它成員。
  
  對等點通過向多播組發送一個消息,來向屬于多播組中的對等點公布自己的存在。每個消息包含關于發送消息的對等點的信息 — 通常是主機名和用于正常(與發現無關)通信的端口。Member 類和 MemberManager 類對這些消息的內容幾乎一無所知。對該信息的訪問權屬于使用這兩個類的應用程序。
  
  有三個接口跨越了消息傳遞/發現層和使用它的應用程序層之間的邊界。它們是 Reference 抽象類、Message 接口和 MessageFactory 抽象類。應用程序必須提供這三個接口的實現。
  
  Reference 抽象類定義了對多播組成員的引用。MemberManager 類治理一個引用集。應用程序將實現這個類的一個具體版本,它將包含應用程序所需要的任何引用邏輯。該類定義了兩個方法,名稱是 equalsInternal() 和 hashCodeInternal(),并且重新定義了 equals() 和 hashCode() 方法來調用這些方法。它通過這樣做來強制實現者為這兩個要害功能提供實現 — MemberManager 依靠于它們。
  
  Message 接口定義了通過網絡代碼交換的消息數據的應用程序視圖。應用程序將該消息看作是相對于應用程序運行范圍的高級概念 — 類似于主機名和端口的概念。網絡代碼希望發送一個由字節組成的包。Message 接口的實現定義了如何將這些高級信息與字節相互轉換。引用是信息的一個要害部分,所有消息都必須包含,因此該接口要求實現提供用于讀和寫 reference 的方法。
  
  問題的最后部分是 MessageFactory 抽象類。這個類定義了生成新的 Message 實例的機制。深藏在 Member 類內的網絡代碼使用一個工廠來創建從多播數據報中抽取出的數據的 Message 實例。每個 MessageFactory 實例擁有一個隨機生成的身份,它使用這個身份來從接收的消息中濾出要發送的消息。
  
  總之,這五個類和接口(Member、MemberManager、Reference、Message 和 MessageFactory)構成了一個用于進行對等點發現的簡單框架。當然,還有可以改進的空間??梢院茌p易地添加一種基于事件的機制,用于向感愛好的偵聽器通知成員的出現或消失。一種用于過濾所接收消息的靈活機制將很有用,但其實現卻比較困難。我將這些建議留作讀者的作業。
  
  Member 類
  上面描述的框架的完整源代碼太長了,這里就不具體展示了,所以讓我們只研究 Member 類的部分代碼,因為其中包含了操作的大多數內容。更準確地說,操作發生在兩個內部類中:MemberClient 類和 MemberServer 類。
  
  請再次考慮第一個示例。它由一個發送 IP 多播數據報的客戶機和一個接收數據報的服務器組成。在本例中(清單 3 和 4),兩個單獨的應用程序執行這兩項功能。P2P 應用程序中的對等點的行為方式既象客戶機又象服務器,所以我們的 P2P 應用程序應該同時包含兩者才是適合的。
  
  清單 3. MemberClient 類
  private
  class MemberClient
  extends Thread
  {
  public
  void
  run()
  {
  try
  {
  while (true)
  {
  try
  {
  Message message = m_messagefactory.createSendMessage();
  Reference reference = message.createReferen

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产成人| 亚洲欧美中文日韩在线v日本| 久久成人在线视频| 日韩中文娱乐网| 精品亚洲永久免费精品| 欧美高跟鞋交xxxxhd| 国产亚洲人成网站在线观看| 精品爽片免费看久久| 国产精品久久久精品| 91免费的视频在线播放| 欧美极品少妇与黑人| 国产精品丝袜久久久久久不卡| 国产午夜精品视频免费不卡69堂| 亚洲第一福利网| 7m第一福利500精品视频| 欧美国产第二页| 国产91精品视频在线观看| 国产成人极品视频| 亚洲精品丝袜日韩| 亚洲欧美激情视频| 精品久久久久久久久久| 久久精品成人欧美大片| 国产91热爆ts人妖在线| 亚洲欧美中文字幕在线一区| 亚洲毛片在线免费观看| 成人免费自拍视频| 国产欧美久久久久久| 亚洲自拍偷拍视频| 日韩在线观看你懂的| 在线观看中文字幕亚洲| 日韩免费av片在线观看| 国产精品久久91| 欧美国产日韩一区二区在线观看| 久久av红桃一区二区小说| 国产精品久久久久久一区二区| 亚洲成人黄色网址| 亚洲91av视频| 日韩在线视频网| 在线亚洲国产精品网| 中文字幕亚洲欧美在线| 日韩中文字幕精品视频| 91高清视频免费观看| 视频在线观看一区二区| 91在线视频精品| 欧美精品videos| 亚洲精品av在线| 欧美日韩国产成人在线观看| 91精品国产91久久久| 91高清免费在线观看| 亚洲午夜激情免费视频| 51ⅴ精品国产91久久久久久| 色综合天天综合网国产成人网| 日韩电影中文字幕一区| 欧美视频在线免费| 国产精品吊钟奶在线| 中文日韩在线观看| 日韩福利在线播放| 亚洲肉体裸体xxxx137| 国产视频999| 亚洲激情第一页| 日韩av综合中文字幕| 久久久在线免费观看| 国产精品日韩欧美大师| 欧美一级片免费在线| 欧美性猛交xxxx富婆弯腰| 久久久久久欧美| 成人美女免费网站视频| 亚洲成**性毛茸茸| 久久精品亚洲精品| 日韩欧美大尺度| 亚洲午夜未删减在线观看| 国产精品三级网站| 亚洲国产精品视频在线观看| 久久久噜噜噜久久中文字免| 狠狠久久亚洲欧美专区| 亚洲va欧美va国产综合久久| 精品亚洲一区二区三区| 国产视频综合在线| 久久久欧美精品| 91av在线免费观看视频| 欧美日韩一二三四五区| 丝袜情趣国产精品| 国产欧美精品一区二区三区-老狼| 国产精品黄色影片导航在线观看| 成人动漫网站在线观看| 欧美成人免费播放| 亚洲剧情一区二区| 国产精品久久久久久久久久新婚| 国产欧美久久一区二区| 国产一区二区香蕉| 亚洲美女av黄| 欧美裸体xxxx极品少妇软件| 国产亚洲精品成人av久久ww| 成人性生交大片免费观看嘿嘿视频| 欧美激情精品久久久久久黑人| 日韩精品在线观看一区| 亚洲黄页视频免费观看| 欧美黄色免费网站| 精品久久久免费| 亚洲国产91色在线| 亚洲成人1234| 日韩视频免费中文字幕| 国产欧美日韩最新| 亚洲激情中文字幕| 日韩av色在线| 亚洲欧洲成视频免费观看| 亚洲精品国产拍免费91在线| 亚洲第一男人天堂| 亚洲成avwww人| 国产在线精品成人一区二区三区| 国产精品91免费在线| 欧美性xxxxx极品| 91精品国产乱码久久久久久蜜臀| 亚洲精品国产综合区久久久久久久| 国产日韩欧美自拍| 欧美重口另类videos人妖| 亚洲日本成人网| 国产精品香蕉国产| 午夜精品视频在线| 国内精品中文字幕| 国产情人节一区| 热门国产精品亚洲第一区在线| 亚洲va欧美va在线观看| 亚洲free性xxxx护士hd| 青草青草久热精品视频在线网站| 超碰日本道色综合久久综合| 成人h片在线播放免费网站| 91精品久久久久久久久不口人| 久久久av亚洲男天堂| 国产欧美一区二区三区四区| 欧美国产日产韩国视频| 亚洲国产精品电影在线观看| 国产精品美女在线| 清纯唯美日韩制服另类| 久久精品色欧美aⅴ一区二区| 色哟哟入口国产精品| 国产精品久久久久久久久久久久久| 欧美理论片在线观看| 欧美专区福利在线| 亚洲视频在线观看| 久99九色视频在线观看| 日韩麻豆第一页| 国产91精品在线播放| 97在线视频免费观看| 久久久久久久久久av| 亚洲第一区在线| 91系列在线观看| 欧美激情xxxx性bbbb| 亚洲激情在线视频| 亚洲国产成人91精品| 国产精品久久久久久久久久久新郎| 国产成人精品一区二区| 亚洲成人教育av| 92裸体在线视频网站| 亚洲精品国产综合久久| 日韩在线激情视频| www.欧美三级电影.com| 欧美国产日韩在线| 亚洲男女自偷自拍图片另类| 久久在精品线影院精品国产| 黑人巨大精品欧美一区二区三区| 国产一级揄自揄精品视频| 成人激情免费在线| 国产亚洲一区二区精品|