java 数据转发

来源:百度知道 编辑:UC知道 时间:2024/06/24 11:09:30
有一个服务器不断的发送一些数据(发送的很快)而且不是每一秒发一条数据是每一秒发很多条,不断的发。客户端线程接受,如果接受线程是每一秒接受一次,就会有很多数据没有收到,但我必须每一秒收一次,谁有好的办法。
就是怎么保障数据不丢失?
我也想改服务器,可惜服务器我都看不见,只有服务器的IP和端口让我怎么改,呵呵。

我们不能保证不丢失,但是我们可以在丢失的时候再发啊,所以我们可以模范TCP协议,下面是我的想法,仅供参考:
1。服务端为每一个发送的数据加一个标识,并在发送的时候该数据加入到一个数组中,这个数组同时要记录这个数据加入的时间(之后要用到这个时间)
2。客户端收到一个数据的时候,要返回服务端一个接受成功的信息,这个信息包含数据标识,服务端收到这个信息就将数组中对应的数据删除;
3。服务器隔一段时间,就读取那个数组,判断数据加入数组的时间到当前时间的时间差,如果时间差大于某一个值(这个值要好好考虑,不过应该要大于1秒),我们就假设发送失败了,那就重发这个数据
4。重复第2和3步骤,直到所有数据发完以及数组为空,那么客户端就应该接受到所有数据了

当然这肯定会影响性能,祝你好运

我的想法哈:
发送端把数据放到一个池里面
接收端也从这个池里去取数据

而这个池应该是一个永久的.

如果是TCP的,数据只有在超出缓冲区才会丢失。
如果是UDP,那就没办法了。

必须每秒接收一次?晕阿。

不都在队列里吗 不会丢失的