即时聊天系统(通信入门)心得

1.文档的重要性

从一位在职人员了解到,一个大概40天的项目开发时间中,大概有30天在不断的开会,去确定文档内容。这对于在职人员可能是家常便饭,但对于我们学生来说是新鲜事,打破了每天苦逼加班的程序员形象。
从时间上来看,文档确实重要。对于个人开发,文档对我起到了与上次开发的衔接作用,因为平时课多再加上 @全体人员 再来几个,基本上开发是在零散时间中完成的,文档就起到了提醒和衔接的作用。
文档的主要内容:信息类的内容规定,每个内容的大小规定。

2.结构图作用极大

在开发初期,对信息传输结构不熟,以至于每次开发和排错速度慢。结构图作用就体现出来了。从登录按钮开始,向服务器发送请求信息,服务器读取第一条信息处理并返回是否成功,并发送好友信息,客户端再读…结构图能让开发者有一个开发顺序,从客户端顺着消息传递的方向写,直到写回客户端的一个顺序。

3.打印类的辅助

可以写一个工具类,主要功能是在catch里或者信息发送之前,打印在哪个类,信息是啥,或者错误是啥,方便开发过程中对bug的处理。再结合流程图,排错会非常简单的。

4.多线程下的安全问题

每次谈及多线程,很多都是安全问题。比如打包解包时,如果又来一条信息,导致信息乱掉等。过多的添加同步代码块又会拖慢服务器处理速度。自然我们要求在保证安全的基础上,越快越好。

5.io

通信方面,百分之二的socket和百分之九十八的io。

5.1.io类的选择

要传输信息不可能就直接传输类啊字符串啥的,就有个打包和解包的操作。就是把消息对象里面的信息转换为字节数组来传输。这样就要用的byteinput/outputstream来读写。到解包过程,需要从byte数组中去提取信息,就要用到dataoutputstream去读取内存中的数据。

5.2.readfully和read的选择和常见bug

在通讯中为什么用readfully而不用while()read。
因为在实际的传输中,由于字节数据是在网络中通过TCP连接进行传输,这些数据刚刚到达接收端(存储在TCP接收缓冲区)的可能只是其中的一部分数据,其他的数据可能还在传输中甚至在发送端的TCP缓存中。
关于readfully的bug方面,一方面是没把byte[]读满,卡在这里了。

你可能感兴趣的:(通讯,java,网络编程)