发表于: 2018-10-13 22:19:11

1 485


今天完成的事情:

  1.今天讲了小课堂;

  2.对spingRMI进行了简单的学习(多模块项目);

   1)公共模块User和UserService;

public class User implements Serializable {
   // 该字段必须存在
   private static final long serialVersionUID = 6876574876472236905L;
   // setter和getter可以没有
   String name;
   int id;

   public User(String name, int id) {
       this.name = name;
       this.id = id;
   }

   @Override
   public String toString() {
       return "User{" +
               "name='" + name + '\'' +
               ", id=" + id +
               '}';
   }
}

public interface UserService {
String getUserName(int id) throws RemoteException;
   int getUserCount() throws RemoteException;
   User getUserByName(String name) throws RemoteException;
}

  2)服务端模块,引用公共模块,实现类和启动server入口以及配置文件;

@Service
public class UserServiceImpl implements UserService {
   public UserServiceImpl() throws RemoteException {
   }

   public String getUserName(int id) throws RemoteException {
       System.out.println("getUserName方法被调用");
       return "zyq:"+id;
   }

   public int getUserCount() throws RemoteException {
       System.out.println("getUserCount方法被调用");
       return 1;
   }

   public User getUserByName(String name) throws RemoteException {
       System.out.println("getUserByName方法被调用");
       return new User(name,2);
   }
}

public class Server {
   public static void main(String[] args) {
       new ClassPathXmlApplicationContext("applicationContext.xml");
       System.out.println("服务发布已发布。");
   }
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
      default-autowire="byName">

   <bean id="userService"
         class="com.zyq.service.impl.UserServiceImpl"/>
   <bean class="org.springframework.remoting.rmi.RmiServiceExporter">
       <property name="service">
           <ref bean="userService"/>
       </property>
       <property name="serviceName">
           <value>rmiUserService</value>
       </property>
       <property name="serviceInterface">
           <value>com.zyq.service.UserService</value>
       </property>
   </bean>
</beans>

  3)客户端模块,引用公共模块,controller,配置文件以及测试类;

@Component
public class UserController {
   @Autowired
   @Qualifier("rmiProxyFactoryBean")
   private RmiProxyFactoryBean rmiProxyFactoryBean;
   private UserService userService;

   public String getUserName(int id) throws RemoteException {
       userService = (UserService) rmiProxyFactoryBean.getObject();
       return userService.getUserName(id);
   }
   public int getUserCount() throws RemoteException {
       userService = (UserService) rmiProxyFactoryBean.getObject();
       return userService.getUserCount();
   }
   public User getUserByName(String name) throws RemoteException {
       userService = (UserService) rmiProxyFactoryBean.getObject();
       return userService.getUserByName(name);
   }
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-2.5.xsd"
      default-autowire="byName">

   <context:component-scan base-package="com.zyq"/>

   <bean id="rmiProxyFactoryBean"
         class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
       <property name="serviceUrl">
           <value>rmi://localhost/rmiUserService</value>
       </property>
       <property name="serviceInterface">
           <value>com.zyq.service.UserService</value>
       </property>
   </bean>
</beans>

public class UserControllerTest {

   @Test
   public void UserConrollerTest() throws RemoteException {
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       UserController userController = applicationContext.getBean(UserController.class);
       System.out.println(userController.getUserName(6));
       System.out.println(userController.getUserByName("aaa"));
       System.out.println(userController.getUserCount());
   }
}

  3.简单学习了网络协议。


明天计划的事情:
  学习svn的简单使用;

遇到的问题:
  无。


收获:

  一个协议层能够用软件、硬件或两者的结合来实现。诸如HTTP和SMTP这样的应用层协议几乎总是在端系统中用软件实现的,运输层协议也是如此。因为物理层和数据链路层负责处理跨越特定链路的通信,它们通常是实现在与给定链路相联系的网络接口卡(以太网或者wifi接口中)。网络层经常是硬件和软件实现的混合体。

  各层的所有协议被称为协议栈。因特网的协议栈由5个层次组成:物理层、链路层、网络层、运输层和应用层。采用自顶向下方法,首先处理应用层,然后向下进行处理。

 (1)应用层

应用层是网络应用程序以及它们的应用层协议存留的地方。因特网的应用层包括许多协议,例如HTTP(提供web文档的请求和传送)、SMTP(提供电子邮件报文的传输)、FTP(提供两个端系统之间的文件传送)。应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息的分组,我们把这种位于应用层的信息分组称为报文。

   (2)运输层(传输层)

因特网的传输层在应用程序端点之间传送应用层报文。在因特网中,有两个运输协议,即TCP和UDP,利用其中的任一个都能传输应用层报文。TCP向它的应用程序提供了面向连接的服务。这种服务包括了应用层报文向目的地确保传递和流量控制(即发送方/接收方速率匹配)。TCP也将长报文划分为短报文,并提供拥塞控制机制,当网络拥塞时,源抑制其传输速率。UDP协议向它的应用程序提供无链接服务,这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞机制。(例如网络直播等采用UDP协议)。我们把传输层分组成为报文段。

   (3)网络层

主要起到路由的作用,核心为分组交换->转发

因特网中的网络层负责将成为数据报的网络层分组从一台主机移动到另一台主机。在一台源主机中的因特网传输层协议(TCP或UDP)向网络层递交传输层报文段和目的地址,就像通过邮政服务寄信件时提供一个目的地址一样。

网络层包括著名的IP协议,该协议定义了在数据报中的各个字段以及端系统和路由器如何作用于这些字段。仅有一个IP协议,所有具有网络层的因特网组件必须运行IP协议。网络层也包括决定路由的路由选择协议,它使数据报根据该路由从源运输到目的地。

  (4)链路层

因特网的网络层通过源和目的地之间的一系列路由器路由数据报。为了将分组从一个结点(主机或路由器)移动到路径上的下一个结点,网络层必须依靠该链路层的服务。特别是在每个结点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给一下个结点。在下一个结点,链路层将数据报上传给网络层。

由链路层提供的服务取决于应用于该链路的特定链路层协议。例如,某些协议基于链路提供可靠传递,从传输结点跨越一条链路到接收结点。值得注意的是,这种可靠的传递服务不同于TCP的可靠传递服务,TCP提供从一个端系统到另一个端系统的可靠交付。链路层的例子包括以太网、WiFi和电缆接入网的DOCSIS协议。因为数据报从源到目的地传输通常需要经过几条链路,一个数据报可能被沿途不同链路上的不同链路层协议处理。例如,一个数据报可能被一段链路上的以太网的下一段链路上的PPP所处理。网络层将受到来自每个不同的链路层协议的不同服务。

   (5)物理层

虽然链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的一个一个比特从一个结点移动到下一个结点。在这层中的协议仍然是链路相关的,并且进一步与该链路(例如,双绞铜线、单模光纤)的实际传输媒体相关。

当然,这并不是唯一的协议栈,在20世纪70年代后期,ISO还提出OSI7层模型:应用层、表示层、会话层、传输层、网络层、链路层、物理层。


返回列表 返回列表
评论

    分享到