База ответов ИНТУИТ

Построение распределенных систем на Java

<<- Назад к вопросам

Модель, при которой сервер инициирует соединение:

(Отметьте один правильный вариант ответа.)

Варианты ответа
часто используется в ситуации, когда клиент и сервер связаны каналом передачи данных недостаточной пропускной способности
используется для того, чтобы снизить нагрузку на сервер
часто используется в ситуации, когда основной задачей клиентов является реакция на сообщения, посылаемые другими клиентами системы(Верный ответ)
Похожие вопросы
Модель "клиент-сервер"
Информационные системы, выполненные в архитектуре "клиент-сервер"
Модель сервиса
Соединение с JMS-провайдером в классе JMSClient осуществляется в строке (листинг программы):
При вызове метода addNewCard, экземпляр Card передается на сервер как:
В строке 18, в классе BillingClient:
1  // BillingClient.java2  // BillingClient использует удаленный объект BillingService для работы 3  // с информацией на пластиковых картах4  package com.asw.rmi.ex2;5   6  // Набор базовых пакетов Java7  import java.rmi.*;8  import java.util.Date;9   10  public class BillingClient {11  // выполнение BillingClient12  public static void main(String[] args) throws Exception{ 13  // создание строки, содержащей URL удаленного объекта14  String objectName = "rmi://"+args[0]+"/BillingService";15  System.out.println("Starting...\n");16  // соединение с реестром RMI и получение удаленной ссылки17  // на удаленный объект18  BillingService bs = (BillingService)Naming.lookup(objectName);19  System.out.println("done");20   21  // проверка на наличие карт с указанными номерами 22  // в случае отсутствия карты с указанными параметрами23  // добавляем новую карту24  Card c;25  c = bs.getCard("1");26  if (c==null) {27  c = new Card("Piter",new Date(),"1",0.0);28  bs.addNewCard(c);29  }30   31  c = bs.getCard("2");32  if (c==null) {33  c = new Card("Stefan",new Date(),"2",0.0);34  bs.addNewCard(c);35  }36   37  c = bs.getCard("3");38  if (c==null) {39  c = new Card("Nataly",new Date(),"3",0.0);40  bs.addNewCard(c);41  }42   43  // определение массива операций по картам44  System.err.println("begin...\n");45  int cnt = 30000;46  CardOperation[] co = new CardOperation[cnt];47  for (int i = 0; i < cnt; i++) {48  switch (i%3){49  case 0:  co[i] = new CardOperation("1",1,new Date());break;50  case 1:  co[i] = new CardOperation("2",1,new Date());break;51  case 2:  co[i] = new CardOperation("3",1,new Date());break;52  }53  }54  // проведение указанных в массиве операций55  bs.processOperations(co);56  57  // печать текущего баланса обработанных карт58  System.out.println(bs.getCard("1"));59  System.out.println(bs.getCard("2"));60  System.out.println(bs.getCard("3"));61  }62  }
В случае если клиент завершит соединение, не послав предварительно сигнал EXIT_CLIENT:
1  package com.asw.net.ex1;2  import java.io.*;3  4  public class BillingClientService extends Thread {5  DataInputStream dis;6  DataOutputStream dos;7  BillingService bs;8  9  public BillingClientService (BillingService bs,DataInputStream dis,DataOutputStream dos){10    this.bs = bs;11    this.dis = dis;12    this.dos = dos;13  }14  15  public void run(){16    System.out.println("ClientService thread started");17    boolean work = true;18    while (work) {19      int command;20      try {21        command = dis.readInt();22        switch (command) {23        case BillingService.ADD_NEW_CARD:24          addNewCard();25          break;26        case BillingService.ADD_MONEY:27          addMoney();28          break;29        case BillingService.SUB_MONEY:30          subMoney();31          break;32        case BillingService.GET_CARD_BALANCE:33          getCardBalance();34          break;35        case BillingService.EXIT_CLIENT:36          work = false;37          break;38        default:39          System.out.println("Bad operation:" + command);40        }41      } catch (IOException e) {42        e.printStackTrace();43      }44    }45  }46  47  void addNewCard() throws IOException{48    String personName = dis.readUTF();49    String card = dis.readUTF();50    bs.addNewCard(personName,card);51  }52  void addMoney() throws IOException{53    String card = dis.readUTF();54    double money = dis.readDouble();55    bs.addMoney(card,money);56  }57  void subMoney() throws IOException{58    String card = dis.readUTF();59    double money = dis.readDouble();60    bs.subMoney(card,money);61  }62  void getCardBalance() throws IOException{63    String card = dis.readUTF();64    double money = bs.getCardBalance(card);65    dos.writeDouble(money);66  }67  }
После выполнения какой строки сервер (класс BillingService) может принимать соединения клиентов:
1  package com.asw.net.ex1;2  import java.net.*;3  import java.util.Hashtable;4  import java.io.*;5  6  public class BillingService extends Thread{7  public static final int ADD_NEW_CARD = 1;8  public static final int ADD_MONEY = 2;9  public static final int SUB_MONEY = 3;10  public static final int GET_CARD_BALANCE = 4;11  public static final int EXIT_CLIENT = 5;12  13  private int serverPort = 7896;14  private ServerSocket ss;15  private  Hashtable hash;16  17  public static void main(String[] args) {18    BillingService bs = new BillingService();19    bs.start();20  }21  22  public BillingService(){23    hash = new Hashtable();24  }25  26  public void run(){27    try {28      ss = new ServerSocket(serverPort);29      System.out.println("Server started");30      while(true){31        Socket s = ss.accept();32        System.out.println("Client accepted");33        BillingClientService bcs = new BillingClientService(this, new DataInputStream(s.getInputStream()), new DataOutputStream(s.getOutputStream()));34        bcs.start();35      }36    } catch (IOException e) {37      e.printStackTrace();38    }39  }40  41  public void addNewCard(String personName, String card) {42    hash.put(card, new Double(0.0));43  }44  public void addMoney(String card, double money) {45    Double d = (Double)hash.get(card);46    if (d!=null) hash.put(card,new Double(d.doubleValue()+money));47  }48  public void subMoney(String card, double money) {49    Double d = (Double)hash.get(card);50    if (d!=null) hash.put(card,new Double(d.doubleValue()-money));51  }52  public double getCardBalance(String card) {53    Double d = (Double)hash.get(card);54    if (d!=null) return d.doubleValue();55    return 0;56  }57  }