对于 Server 来说,默认使用 netpoll,可以通过配置项进行更改:
注意:netpoll 目前不支持 Windows,Windows 会通过条件编译将网络库自动切换为 go net。
server.New(server.WithTransport(standard.NewTransporter))
server.New(server.WithTransport(netpoll.NewTransporter))
对于 Client 来说,可以通过配置项进行更改:
client.NewClient(client.WithDialer(standard.NewDialer()))
client.NewClient(client.WithDialer(netpoll.NewDialer()))
go net
网络库。netpoll
正在实现对 TLS 的支持。go net
为 ET 模型,netpoll
为 LT 模型,使得两个网络库的适用场景有一些不同。
在 ET 模型下,由框架处理 Read / Write 事件;在 LT 模型下,由网络库处理 Read / Write 事件。
使得在小包场景下,由于更优的调度策略使得 LT 性能更好;在大包场景下,由于读 / 写不受框架层控制,使得大量数据被读入内存而不能及时处理,可能会造成内存压力。