我正在尝试在golang中实现Reliable-UDP。
我需要实现的一个基本功能是数据包重传。
天真的方法如下:
这很简单,但创造很多goroutine并不是免费的。我不认为TCP中的数据包重传实现使用这种方法。
那么,有没有办法在不创建新goroutine的情况下回调函数?
我已经检查了golang-nuts(https://groups.google.com/forum/#!topic/golang-nuts/ja8j7wQUB-0)的帖子,但仍无法找到解决方案。
答案 0 :(得分:0)
您可以使用time.NewTicker创建一个计时器对象,这将提供定期发送消息的通道。
答案 1 :(得分:0)
您想创建一个包含所有预定超时的priority queue。单个goroutine应该检查优先级队列的头部,一直睡到下一个超时,然后执行相关代码或丢弃它。
当然,您需要处理同步问题。 Java方法是通过锁保护优先级队列。更多的方法是让超时处理goroutine负责排队超时,它通过专用信道接收。
package container/heap
中有一个优先级队列实现,但我没有检查它有多好。