最好能给出 在项目中使用的示例
对啊,最好是多点example,一般的网络库都有些基础功能的example的,比如echo,chat等,包括服务端和客户端,这样使用的人才更容易直接用在项目中,现在还是不太容易把这个库直接接入项目里。
话说你整合到你们项目的时候客户端和服务器都用的这个库吗?
没,我只集成到客户端,我们服务器是java, 并发服务器不建议使用本库
yasio-3.21.0
- 修复start_service/stop_service不能多次调用
- 增加YASIO_NI接口, 以便进行跨语言交互,例如C#, Unity.
- 修复lua5.2, lua5.3 C++11 编译问题
- transport使用对象池分配,返回句柄对YASIO_NI更安全
- 修改脚本API: ibstream.read_v, obstream.write_v默认使用变长长度域,和C# BinaryWriter, BinaryReader兼容
6.移除脚本API: ibstream.read_string, obstream.write_string, 兼容方式: write_v/read_v, 具体见wiki - YASIO_NI API: yasio_set_resolv_fn设置自定义域名解析, 例如httpdns
大佬,请问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基本上等同于轮循