Open tidus5 opened 6 years ago
这个地方是因为update的时候并没有真的发出去,send后需要等到10ms以后才发。 现在还没有想好怎么改。
@beykery 那么可否这样理解: send 的时候,可以把list 里堆积的消息全部发出去么。 就算更新频率慢些,但发送消息条数应该不会差太多才对。另外更新频率参数我试着修改到 1ms, 数量还是没有明显提高。
你改成1ms是没用的,因为最小就是10ms; 另外,send的时候会先保存到queue里面,等下一个调度,10ms后才能发出去,那么,对端也就是10ms以后才能收到,收到后echo回去,还是要等10ms才能真正发出去;这就是为何你的测试echo的时候很慢。 但我还没想好怎么改。
noDelay(int nodelay, int interval, int resend, int nc) 这个方法的的 interval 参数,是否就算这个调度时长? 我是把这个参数。。。额,看到内部代码了,包内部最小设置了是10ms。 那么,C#的原版的代码是否也有这个问题呢,就是互发频率不够高的问题?
你说的哪个c#原版?
https://github.com/skywind3000/kcp
这个啊,kcp的原版。 哦,原版是C++的,记错了
这个问题,可以参考原作的这个issue: https://github.com/skywind3000/kcp/issues/105 看来也没有特别的办法了。
TestServer 和 TestClient 的 handleRecieve 都改为类似 @Override public void handleReceive(ByteBuf bb, KcpOnUdp kcp) { String content = bb.toString(Charset.forName("utf-8")); System.out.println("KCP "+ content +System.currentTimeMillis()); kcp.send(bb);// echo } 互相回发,Client的main函数中 sleep 1s 后调用close() 方法,测试下来Server端可以打印100行左右。 而用Netty直接写UDP测试1s可以打印出近2000行消息,TCP 1s 也可以打印近1800行消息。
造成这种差异的原因,是KCP算法本身调度,和增加了流量大小所致,还是别的原因?
测试DUP 用例: public class Server { private static Logger logger = LoggerFactory.getLogger(Server.class);
}
public class Client { private static Logger logger = LoggerFactory.getLogger(Client.class); private int scanPort;
}
public class AppConstants {
}