最近项目遇到了很多问题,第一就是长连接短连接的问题
最常出现的问题就是:socket is close
然后就是:Ac
关于第一个问题:在我第一次这个项目的时候就疑惑了很久,问题主要体现在客户端和服务器两方面,在客户端中,只要有一个流关闭,客户端和服务器就建立不起来连接,主要体现,所以我们不能使用close来关闭流,只能使用flush来刷新流,目前还没想到什么在不关闭流的就能使socket关闭的方法,就目前而言我只能实现,通过不断创建流来维持和服务起的联系。
在服务器也是同样的道理(对于短连接可以选择关闭,反正在短连接中循环时一定要关闭的),所以我们最好在短连接的时候就要把流该关闭的就要关闭。
而在长连接中我们尽量使用flush来实现这个不关闭流然后socket不关闭。
关于第二个问题更加的麻烦这个问题主要时在序列化流的设计上的问题,每次我们在传送资料的时候流都会带一个头节点,这个头节点相当于是一个标记的作用我们在使用这个时候需要自己来写一个继承于ObjectInputStream流的流,这个时最好的,但是这个需要我们自己人工来进行判断,我们当然可以选择开多个线程来分别判断这个事短连接还是长连接(就我目前的知识水平来说并不知这个那个好那个坏),由于我最开始写的就是没有开多线程来实现这个的,所以还是按照我的想法来进行书写,使用一个while循环,每次一遇到短连接,就将while循环里面的条件改变为false这个样就可以及时反应出短连接还是长连接了。
在长连接中我可以不断的new一个流出来,这样就可以使得我们都可以创造一个头节点了,但是这样会很占用资源(毕竟没有close掉只是flush掉,到最后会越来越多,不建议这种搞法,还是自己写一个继承流好。)。