分布式服务实现细节-客户端发送流程

1.客户从服务总线请求获取服务对象。
     2.服务总线根据已注册的数据来找到该服务对象信息,如和客户端不在一个服务器类,返回一个远程代理,如在一个服务器类,返回一个包含本地服务对象的本地代理总之都是返回一个代理,对用户来说是透明的
     3.客户调代理的方法, 如该代理是本地代理,直接调本地服务对象方法,并返回就结束
     4.如是远程代理,远程代理先获取该远程服务器在本地对应的远程处理对象,如没有则创建一个,并缓存它
     5.远程处理对象根据这次请求生成一个唯一的sessionid,封装到session对象中,
     6.如第一次连接远程机器,则创建连接socket,并缓存到该远程处理对象中,远程处理对象同时起另外一个监视线程来监视socket输入流信息

     7.按照请求消息体得格式,将请求报文写入到socket的输出流中,并刷新流
     8.获取响应(如响应还没有到,。session对象阻塞)
     9.监视线程获取到了响应后,将按照响应消息体格式将响应一次读出来。并根据响应中的sessionid来匹配缓存中的Session对象。并唤醒此对象
     10.session对象解析响应报文,并重新序列化成对象
     11.远程代理将返回结果返回给调用者

注意:如果采用字节流传输,而字节是8位的,所以像Java的int (32位) 等都需要通过移位与反移位将其转化为字节来传输,否则就是失去数据

猜你喜欢

转载自xiaoyuwei.iteye.com/blog/1135132