gnet
gnet copied to clipboard
希望实现 SetDeadline, SetReadDeadline, SetWriteDeadline
恭喜发布 gnet v2
但 v2 中好像还没有实现 SetDeadline,非常期待这个功能。
不知何时能够实现?
是否要以使用时间轮的方式来实现,减少Ticker数量对CPU的压力?
gnet
是基于事件驱动的,Read()/Peek()
这些 APIs 只在 Ontraffic()/OnOpen()
这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用 read()
去 socket fd 尝试读数据,如果 socket buffer 没数据则挂起当前 goroutine,所以 gnet.Conn
并不需要这几个 APIs。
能否问下,v2相比v1有什么改变/增强吗,前几天还在熟悉gnet,今天才发现有v2了
能否问下,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可利用的?
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。请教一下!一般连接都会使用心跳包来保活,gnet不阻塞的这种模式下,每个连接不开一个线程,能怎么实现超时处理?或者gnet在心跳包这一块有什么api可利用的?
用 TCP 的 KeepAlive 机制是否能满足你的需求?
如果用 TCP 的 KeepAlive 的话,希望能够分别设置 TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL,但目前的代码中仅有一个参数,没法精确控制。
能不能实现分别设置 TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL?
比如采用下面的方法:
WithTCPKeepAlive(cnt, idle, intvl int)
谢谢
gnet
是基于事件驱动的,Read()/Peek()
这些 APIs 只在Ontraffic()/OnOpen()
这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用read()
去 socket fd 尝试读数据,所以gnet.Conn
并不需要这几个 APIs。请教一下!一般连接都会使用心跳包来保活,gnet不阻塞的这种模式下,每个连接不开一个线程,能怎么实现超时处理?或者gnet在心跳包这一块有什么api可利用的?
用 TCP 的 KeepAlive 机制是否能满足你的需求?
如果用 TCP 的 KeepAlive 的话,希望能够分别设置 TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL,但目前的代码中仅有一个参数,没法精确控制。
能不能实现分别设置 TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL?
比如采用下面的方法:
WithTCPKeepAlive(cnt, idle, intvl int)
谢谢
目前 gnet 的 SetTCPKeepAlive()
是和 go 语言的标准库保持一致的,不过新加一个更加精确的 API 也可以,我后面会加上。
恭喜发布 gnet v2
但 v2 中好像还没有实现 SetDeadline,非常期待这个功能。
不知何时能够实现?
gnet
是基于事件驱动的,Read()/Peek()
这些 APIs 只在Ontraffic()/OnOpen()
这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用read()
去 socket fd 尝试读数据,所以gnet.Conn
并不需要这几个 APIs。请教一下!一般连接都会使用心跳包来保活,gnet不阻塞的这种模式下,每个连接不开一个线程,能怎么实现超时处理?或者gnet在心跳包这一块有什么api可利用的?
用 TCP 的 KeepAlive 机制是否能满足你的需求?
如果用 TCP 的 KeepAlive 的话,希望能够分别设置 TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL,但目前的代码中仅有一个参数,没法精确控制。 能不能实现分别设置 TCP_KEEPCNT, TCP_KEEPIDLE, TCP_KEEPINTVL? 比如采用下面的方法:
WithTCPKeepAlive(cnt, idle, intvl int)
谢谢
目前 gnet 的
SetTCPKeepAlive()
是和 go 语言的标准库保持一致的,不过新加一个更加精确的 API 也可以,我后面会加上。
V2 只看到SetKeepAlivePeriod 并没有看到SetTCPKeepAlive() ...
gnet
是基于事件驱动的,Read()/Peek()
这些 APIs 只在Ontraffic()/OnOpen()
这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用read()
去 socket fd 尝试读数据,所以gnet.Conn
并不需要这几个 APIs。请教一下!一般连接都会使用心跳包来保活,gnet不阻塞的这种模式下,每个连接不开一个线程,能怎么实现超时处理?或者gnet在心跳包这一块有什么api可利用的?
用 TCP 的 KeepAlive 机制是否能满足你的需求?
可以的话还是想做自己协议的心跳包... 灵活度比较高... 心跳机制,除了keeplive有没有比较好的实现方式?
用 TCP 的 KeepAlive 是无法满足7层的心跳需求的。
4层只是检查链路的可用性 7层是需要在链路稳定性基础上检查是否僵尸,比如慢连接或者僵尸连接攻击,虽然每个fd对应的tcp都是健康的,但是大量的僵尸fd耗尽文件描述符导致服务不可用
gnet
是基于事件驱动的,Read()/Peek()
这些 APIs 只在Ontraffic()/OnOpen()
这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用read()
去 socket fd 尝试读数据,如果 socket buffer 没数据则挂起当前 goroutine,所以gnet.Conn
并不需要这几个 APIs。
您好,我现在需要做一个文件拉取的工作,现在发现没有当服务器上把数据写完了,但是本地会丢失很多文件,问题应该是默认的缓存不够,导致数据覆盖,所以就丢失了。请问这个应该怎么处理?如果read()可以使用,那么我每发送一个文件就可以使用read()去阻塞,当接收到了客户端的消息,再继续往下走,但是现在这个不能使用了
gnet
是基于事件驱动的,Read()/Peek()
这些 APIs 只在Ontraffic()/OnOpen()
这几个事件回调里才能调用,这里读取的是已经存入本地 buffer 的数据,所以是非阻塞的,而且一定能读到数据,不像标准库是直接调用系统调用read()
去 socket fd 尝试读数据,如果 socket buffer 没数据则挂起当前 goroutine,所以gnet.Conn
并不需要这几个 APIs。您好,我现在需要做一个文件拉取的工作,现在发现没有当服务器上把数据写完了,但是本地会丢失很多文件,问题应该是默认的缓存不够,导致数据覆盖,所以就丢失了。请问这个应该怎么处理?如果read()可以使用,那么我每发送一个文件就可以使用read()去阻塞,当接收到了客户端的消息,再继续往下走,但是现在这个不能使用了
信息太少,不是很理解你的场景,麻烦说详细点,最好能附上 demo 代码。
是否要以使用时间轮的方式来实现,减少Ticker数量对CPU的压力?
时间堆更好