大佬,请问yasio_kcp有做吗?
或者能否指教一下怎么结合使用,谢谢了
看了下,完全看不懂,我太菜了……
是不是把yasio替换成yasio_kcp就可以了?
对,你和原版yasio.cpp, yasio.h对比一下,差异不是很大
使用,都用UDP就行,详娟
yasio_kcp_test.cpp
好的,谢谢大佬
再请教一下,我连任何ip和端口都会显示连接成功,是我的使用方法有问题吗?
附上代码:
this.yclient = new yasio.io_service();
this.tsport_c = null;
this.yclient.set_option(yasio.YOPT_LFBFD_PARAMS, 65535, 1, 2, 1);
this.yclient.start_service({ host: '192.168.0.11', port: 8888 }, (event) => {
let kind = event.kind();
if (kind === yasio.YEK_CONNECT_RESPONSE) {
fun.log('net', 'yasio event --> connect server succeed, kind = ', event.kind(), 'status = ', event.status());
this.tsport_c = event.transport();
this._connected = true;
fun.event.emit("WebsocketOpen", { state: "connected" });
} else if (kind === yasio.YEK_PACKET) {
fun.log('net', 'yasio client--> recive a packet from server, kind = %d, close connect after 3 seconds', event.kind());
this.onmessage(event);
} else if (kind === yasio.YEK_CONNECTION_LOST) {
fun.log('net', 'yasio client--> connect lost kind = %d', event.kind());
} else {
fun.log('net', 'yasio client --> other kind = ', event.kind());
}
});
this.yclient.open(0, yasio.YCM_UDP_CLIENT);
this.yclientID = yasio.setInterval(() => {
this.yclient.dispatch_events(128);
}, 0.01);
日志:
05-23 14:03:13.498 19603-20076/games.xx.xxI/yasio: [yasio][1558591393498578] [index: 0] connecting server 192.168.0.11:8888...
05-23 14:03:13.502 19603-20076/games.xx.xxI/yasio: [yasio][1558591393501944] [index: 0] the connection #1 [192.168.1.111:43731] --> [192.168.0.11:8888] is established.
05-23 14:03:13.973 19603-19691/games.xx.xxD/jswrapper: JS: 【net】 "yasio event --> connect server succeed, kind = ",0,"status = ",0," time:1558591393973"
服务端使用的kcp-go不知道有影响没?
找到原因了,kcp-go里添加了前向纠错,关掉就好了。
只是现在向服务端发送hello,服务端收到完整数据,回传给客户端的收到的却是ello
set_option(yasio.YOPT_LFBFD_PARAMS, 65535, 0, 0, 0);
或者
set_option(yasio.YOPT_LFBFD_PARAMS, 65535, -1, 0, 0);
通过node-kcp验证服务端没问题,请问是我的设置不对吗?
udp只是建立映射,没有连接概念,所以是立即返回成功的
注意: 选项必须是, 对于无长度字段设计的消息通讯,必须设为:
set_option(yasio.YOPT_LFBFD_PARAMS, 65535, -1, 0, 0)
否则,按照具体的协议设置
怪我没表述清楚
最开始的设置就是set_option(yasio.YOPT_LFBFD_PARAMS, 65535, -1, 0, 0)
收到的回复是ello
我在js_yasio_io_event_packet中打印packet的值是hello说明网络收发是正常的
但是在js_yasio_ibstream_read_v中打印sv的值就是ello加一些乱码了……
改为发送arraybuffer,接收时用event.packet(true)就正常了……
对,对于非TV或TLV数据,不能用ibstream的read_xx, 直接用这个 event.packet(true)
好的,谢谢大佬
再请教一下:
使用注释的设置时,我们在良好的wifi环境下,普通消息收发要1秒,有的消息甚至长达9秒
而使用注释下面那行的设置时则只需要100ms左右,请问为啥interval要设置那么大呢?
设置100ms会比较耗费CPU,另外,我这里只是试验性地实现,可能没完全理解kcp作者的API调用方式,对于已经存在异步阻塞模型的场景,kcp作者没有具体的示例。设置100ms基本上等同于轮循
谢谢了,我先看看
更新一下, yasio_kcp连接管理有点问题,断开检测逻辑不对,收发延迟我再看看,收发延迟问题,你有什么想法也可以提出来
再更新一下,应该没有延迟了: https://github.com/halx99/yasio/commit/c06526b175d256f929f977e22975375aaa505541
cpu占用效果还行:
有什么其他问题,随时联系