Andy Pan
Andy Pan
我知道是一开始只是分配虚拟内存,但是固定长度的话不太灵活,如果超出了怎么处理又是一个问题,要么拒绝新连接,要么扩容。
数组是连续内存,扫描的时候比 map 快多了
`gnet` 是基于事件驱动的,`Read()/Peek()` 这些 APIs 只在 `Ontraffic()/OnOpen()` 这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用 `read()` 去 socket fd 尝试读数据,如果 socket buffer 没数据则挂起当前 goroutine,所以 `gnet.Conn` 并不需要这几个 APIs。
> 能否问下,v2相比v1有什么改变/增强吗,前几天还在熟悉gnet,今天才发现有v2了 性能提升,API 更加精简,同时增加更多 API 支持,如果你刚开始要使用 gnet,我建议是直接用 v2。 具体可以看:https://gnet.host/blog/announcing-gnet-v2/
> > `gnet` 是基于事件驱动的,`Read()/Peek()` 这些 APIs 只在 `Ontraffic()/OnOpen()` 这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用 `read()` 去 socket fd 尝试读数据,所以 `gnet.Conn` 并不需要这几个 APIs。 > > 请教一下!一般连接都会使用心跳包来保活,gnet不阻塞的这种模式下,每个连接不开一个线程,能怎么实现超时处理?或者gnet在心跳包这一块有什么api可利用的? 用 TCP 的 KeepAlive 机制是否能满足你的需求?
> > > > `gnet` 是基于事件驱动的,`Read()/Peek()` 这些 APIs 只在 `Ontraffic()/OnOpen()` 这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用 `read()` 去 socket fd 尝试读数据,所以 `gnet.Conn` 并不需要这几个 APIs。 > > > > > > > > >...
https://github.com/gnet-io/gnet-examples/blob/master/examples/push/push.go
> > https://github.com/gnet-io/gnet-examples/blob/master/examples/push/push.go > > 我可能更需要直接调用 func (c *conn) write(buf []byte) (err error) 这个方法 > > 异步的可能对延迟有一定影响 因为目前 conn 是没有锁保护的,因此所有相关的操作都会放到单 goroutine 里执行以确保没有 data race,所以不能直接调用 c.write.
个人暂时还没时间弄,欢迎贡献。