zoukankan      html  css  js  c++  java
  • 基于RMI的即时通讯工具的设计与实现

    今天整理电脑,发现了上学期写的类似于QQ的程序,当时老师让用RMI实现一个小系统,于是就用java rmi完成了一个类似于QQ的即时通讯工具,并把它命名为RmiTalker,主要完成了以下功能:

    1.用户注册:用户填写基本信息,系统自动生成TmiTalker号码,然后用户可以利用此号登录

    2.用户登录:使用注册的号码登录

    3.加好友:用户可以查找注册的用户,并且加为好友

    4.即时聊天:收到消息后好友的名字将以橙色显示。

    5.离线留言:如果好友不在线,可以留言,好友上线后就会看到留言;

    程序主要实现了服务器和客户端两个部分。

    服务器:服务的启动;列出在线用户以及所有注册用户;修改侦听端口;

    客户端:

    登录界面(注意登录时设置正确的服务器地址与端口)

    注册界面

    程序主界面,收到新消息后好友的名字以橙色显示

    添加好友界面

    注:个人感觉,像这种即时聊天类的程序,用RMI实现,不是很合适,毕竟是建立在一个类似于中间件之上,相对于用socket实现,增加了一层,使设计简单了但是效率应该不高。还是直接用socket实现效率高点吧,当然java也应该被直接排除……感觉rmi比较适合于面向服务的系统,和web service有点类似,但是web service又在rmi上加了一层,效率可想而知……

    最近正在看TCP/IP,网络协议的设计也是采用了分层,从物理层一直到应用层,一层层的包装,应用层的数据是实际有用的数据,然后经过各个层之后,每层都在上一层数据的上面加一个首部,当然这是为了完成该层的功能,直到最后,经过实际的物理网络,把带有各个层首部的数据发送出去,然后到目的地之后就是一层层的脱去首部,得到应用程序实际需要的数据。

    再看看应用之上的软件体系结构,RMI(或者RPC)按照一定的格式调用远程方法,但是到底层,还是要把各种形式调用以数据包发送到目标应用程序(服务器),然后服务器解析数据包,得到远程对象和方法后调用之,之后把结果以某种形式格式化,发送回调用方。可见,RMI也可以看做是一种协议,它建立在网络协议之上层,当然具体到实现,它可以看做一种中间件,因为它提供了要实现远程调用需要的各种基础服务。协议,对于通信双方,本身就是一种约定,大家按照一种规定好的格式进行一系列的交互。而之后的web service,它利用soap,采用了xml对数据进行格式(因为xml的自解释性?),底层好像也是采用RMI(或者RPC)来完成交互,当然,归根到底,最后还是采用socket进行数据传输。

    这使我不禁想起算法老师说的一句话,软件工程(或者软件体系架构)就是纯粹的以浪费程序的运行效率来解决大规模的软件系统的复杂性(大意是这样子,原话记不清了)。现在想想,此话深有道理。这倒不是说软件工程不好,对于大型的系统,软件工程对于软件的成功还是很重要的,但是同时也提醒我们,不能因为软件工程给我们带来的方便而滥用之,毕竟这是以牺牲效率为代价的。养成写高效的代码的习惯还是很重要的。

    呵呵,好像跑题了,最后奉上源代码,希望大家多提意见……

     点此下载

  • 相关阅读:
    吴裕雄--天生自然 PYTHON数据分析:糖尿病视网膜病变数据分析(续三)
    吴裕雄--天生自然 PYTHON数据分析:糖尿病视网膜病变数据分析(续二)
    吴裕雄--天生自然 PYTHON数据分析:糖尿病视网膜病变数据分析(续一)
    吴裕雄--天生自然 PYTHON数据分析:糖尿病视网膜病变数据分析
    吴裕雄--天生自然 R数据分析:2014年美国人时间使用调查(ATUS)饮食与健康模块文件分析
    吴裕雄--天生自然 PYTHON数据分析:所有美国股票和etf的历史日价格和成交量分析
    吴裕雄--天生自然 中医研究学习:入门
    吴裕雄--天生自然 python数据分析:健康指标聚集分析(健康分析)
    回首2018 | 分析型数据库AnalyticDB: 不忘初心 砥砺前行
    如何玩转跨库Join?跨数据库实例查询应用实践
  • 原文地址:https://www.cnblogs.com/gaojing/p/1578814.html
Copyright © 2011-2022 走看看