
ONE
semillon
这个作者很懒,什么都没留下…
展开
-
自己实现RMI(五)socket通信方案之TCP通信
其实,我一开始的RMI的数据传输采用的就是普通的TCP通信方案,只是TCP比UDP效率稍微低点(UDP的方案比TCP的方案也没快多少~O(∩_∩)O~) TCP通信方案是可信的,只是实现的时候,收发时的数据最好是字符串,即接收端用readline函数接收字符串,这样的话效率高,如果用readbyte多次读取数据,效率低下。 其次,用TCP方案的话,不要用自带的s原创 2012-08-28 20:40:07 · 3251 阅读 · 0 评论 -
自己实现RMI(六)压缩与解压
当时在优化网络通信的时候,考虑到把序列化后的字符串压缩一下,体积减小,这样可能网络传输会快点。但是这个压缩过程比较耗时,而压缩解压带来的额外开销,和网络上直接传输体积稍微大的字符串,相比下来没什么优势(实际测试过了)。不过既然实践过了,还是留下一点痕迹吧。 // 压缩public static byte[] compress(String str) throws IOException原创 2012-08-28 21:00:08 · 2298 阅读 · 0 评论 -
ONE源码阅读之源码结构
借用ONE写了一个专利,过程中,仔细分析了ONE源码,并在其基础上写了不少代码,在这里做一下总结。 源码中,重要的包由core,gui,input,movement,report,routing,ui。其中,core是整个系统的核心实现源码;gui是GUI界面的实现;input是输入模块的实现,对于仿真系统来说,定时消息也是输入;movement是运动模型的实现;report是日原创 2012-08-28 11:50:46 · 4509 阅读 · 0 评论 -
ONE源码阅读之输入模型和运动模型
输入模型: ONE仿真系统中,定时产生仿真消息的实现在MessageEventGenerator。首先,它是一个事件队列EventQueue(接口)。MessageEventGenerator通过实现nextEvent来产生一个事件MessageCreateEvent,同时产生一个随机时间n,直到过了n个嘀嗒后才产生下一个事件,这样的话,仿真器只需要在合适的时候调用nextEve原创 2012-08-28 12:07:51 · 2254 阅读 · 0 评论 -
自己实现RMI(二)对象索引和方法回调
利用java中的map数据结构,可以很方便的实现对象的索引。此外,支持RMI的对象,必须支持序列化以及对象索引。序列化接口定义如下:public interface CommaSerialize { public abstract void toSerialize(CommaString writer);//序列化 public abstract void deSerialize(Com原创 2012-08-28 16:02:50 · 3362 阅读 · 0 评论 -
自己实现RMI(三)对象序列化与反序列化
对象的序列化就是把对象的状态用字符串或者byte数组表示,以方便在网络上传输或者将数据写入文件。而反序列化即根据字符串或者byte数组欢迎对象的状态。一般常用的序列化方法是xml序列化,将对象的各个属性写入xml,然后用网络发送到远方,远方收到xml后创建一个空对象,最后根据xml的信息欢迎对象的状态。 当然用json来序列化要比xml要高效很多。但是,经过实验研究发现json还原创 2012-08-28 16:47:14 · 5269 阅读 · 0 评论 -
自己实现RMI(一)基本原理
RMI,即远程过程调用。在java中,利用RMI机制可以调用远程java虚拟机上面的对象,而且调用时跟调用本地对象一模一样。 虽然java类库里面有现成的RMI可以用,但是效率很低,基本上很难满足实际需要。至少,在一些要求快速调用远程对象的情况下,库里面的RMI基本上就是摆设。 参考RMI的基本原理,我自己实现了一套RMI方案。从原理上讲,实现过程是这样的:支持原创 2012-08-28 15:42:11 · 3030 阅读 · 0 评论 -
自己实现RMI(四)socket通信方案之UDP通信
虽然说UDP通信不可靠且没有连接状态,但是高效的传输效率还是非常诱人的。鉴于本人的项目环境是千兆以太网,考虑采用UDP通信来传输对象的序列化后的状态。原因有:以太网内传输UDP包基本上不会丢包,在程序设计时候可以不考虑该因素。此外,连接状态以及包乱序的问题,可以很方便的解决。下面具体讲述鄙人的简单方案。 基本原理是服务器端监听某端口,当有客户端发送请求,则新建线程为客户服务,线程原创 2012-08-28 17:54:23 · 4596 阅读 · 0 评论