【mini-asio】 轻量级夸平台底层客户端网络解决方案

大佬,请问yasio_kcp有做吗?
或者能否指教一下怎么结合使用,谢谢了

尝试搞了下,可以参考一下: https://github.com/halx99/yasio/tree/experimental/yasio/experimental

看了下,完全看不懂,我太菜了……
是不是把yasio替换成yasio_kcp就可以了?

对,你和原版yasio.cpp, yasio.h对比一下,差异不是很大
使用,都用UDP就行,详娟
yasio_kcp_test.cpp

好的,谢谢大佬:pray:

再请教一下,我连任何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)

1赞

好的,谢谢大佬

再请教一下:

使用注释的设置时,我们在良好的wifi环境下,普通消息收发要1秒,有的消息甚至长达9秒
而使用注释下面那行的设置时则只需要100ms左右,请问为啥interval要设置那么大呢?

设置100ms会比较耗费CPU,另外,我这里只是试验性地实现,可能没完全理解kcp作者的API调用方式,对于已经存在异步阻塞模型的场景,kcp作者没有具体的示例。设置100ms基本上等同于轮循

https://github.com/skywind3000/kcp/issues/138
看一下这篇文章

谢谢了,我先看看

更新一下, yasio_kcp连接管理有点问题,断开检测逻辑不对,收发延迟我再看看,收发延迟问题,你有什么想法也可以提出来

再更新一下,应该没有延迟了: https://github.com/halx99/yasio/commit/c06526b175d256f929f977e22975375aaa505541

cpu占用效果还行:

有什么其他问题,随时联系

1赞