skyw4code
skyw4code
> 能先说一下你的解决思路是什么吗?我昨天想了一下,最简单的做法就是用 slice 代替 map,fd 作为 slice 下标,但缺点是需要预分配固定长度的 slice,或者使用 map[int]int + slice,可以实现动态分配,但是又有可能在不断扩容 slice 的时候导致大量的拷贝,目前的思路是参考 [bigcache](https://github.com/allegro/bigcache) 的思路实现一个精简版的,基本思路也是 map[int]int + slice 但是更高效,看看你有没有更好的思路? @situnan 刚好也在梳理这一块,map[int]int + slice确实是一个比较好的思路,但也会附带其他的问题,如:高并发锁竞争问题、扩容、缩容的问题... 目前也还没想到比较好的方案! @panjf2000 后续是否有计划调整udpSockets map[int]*conn、connections map[int]*conn的类型?没看细读代码,connections貌似没用锁保证线程安全或是不需要?
> 嗯。map[int]int + slice 模型。请参考: > > https://github.com/legougames/slice_map 他这个不是线程安全的...
> `gnet` 是基于事件驱动的,`Read()/Peek()` 这些 APIs 只在 `Ontraffic()/OnOpen()` 这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用 `read()` 去 socket fd 尝试读数据,所以 `gnet.Conn` 并不需要这几个 APIs。 请教一下!一般连接都会使用心跳包来保活,gnet不阻塞的这种模式下,每个连接不开一个线程,能怎么实现超时处理?或者gnet在心跳包这一块有什么api可利用的?
> 恭喜发布 gnet v2 > > 但 v2 中好像还没有实现 SetDeadline,非常期待这个功能。 > > 不知何时能够实现? > > > > > `gnet` 是基于事件驱动的,`Read()/Peek()` 这些 APIs 只在 `Ontraffic()/OnOpen()` 这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用 `read()` 去 socket...
> > > `gnet` 是基于事件驱动的,`Read()/Peek()` 这些 APIs 只在 `Ontraffic()/OnOpen()` 这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用 `read()` 去 socket fd 尝试读数据,所以 `gnet.Conn` 并不需要这几个 APIs。 > > > > > > 请教一下!一般连接都会使用心跳包来保活,gnet不阻塞的这种模式下,每个连接不开一个线程,能怎么实现超时处理?或者gnet在心跳包这一块有什么api可利用的? > > 用...
> 这个问题很神奇,我同一个项目,克隆到两目录,install 的日期不一样。。。一个目录可以正常run,另一个不行。。。我估计可能跟某个库的版本有关系。 一样情况,原先项目能运行,昨天手欠,删了重新install,就不行了... 不知道哪个库影响了,能找出来吗?
总不能靠注释代码解决问题吧... - - ! 抽了点时间看了一下,index.less中 ``` :global { .anticon-caret-up { color: @red-6; } .anticon-caret-down { color: @green-6; } } ``` 修改为: ``` ::v-deep(.anticon-caret-up) { color: @red-6; } ::v-deep(.anticon-caret-down) { color:...
总不能靠注释代码解决问题吧... - - ! index.less中 ``` :global { .anticon-caret-up { color: @red-6; } .anticon-caret-down { color: @green-6; } } ``` 修改为: ``` ::v-deep(.anticon-caret-up) { color: @red-6; } ::v-deep(.anticon-caret-down) { color:...
> 这个问题主要是 gnet v1 里出现的,因为 v1 有编码器和解码器的功能,导致解码器在识别第一个特殊包的场景中不是很灵活,但是 gnet v2 移除了编码器和解码器,现在整个数据解析逻辑都要放在 `OnTraffic()` 里了,更加灵活,就没必要再设置一个所谓的 handler 了,用户自己判断一下第一个包然后处理就行了。 是~~~ 其实纠结的是后面每次数据包来的时候也得都去判断一下,这个很难受...
> 下次判断一下这个标志,跳过就行了。 emmm... 我说的就是这个判断,这也是判断啊...