Closed zhwaaaaaa closed 3 years ago
gnet
不支持这个功能。
可以增加这个功能吗
我之前就是觉得 evio 的这个功能没什么太大的实用价值才在开发 gnet 的时候移除掉的,你要是想监听不同的端口直接在不同的 goroutines 里调用 gnet.Serve() 不就可以了吗?
有些场景下想使用单个线程,并且监听多个端口。我觉得可以像libuv一样把EventLoop 暴露出来,让使用者选择使用何种线程模型
有些场景下想使用单个线程,并且监听多个端口。
能具体说明一下出于什么考虑要用单线程监听多个端口吗?
我觉得可以像libuv一样把EventLoop 暴露出来,让使用者选择使用何种线程模型
不是很理解,"把EventLoop 暴露出来" 是什么意思?还有线程模型的选择,现在 gnet 的线程模型的切换是通过使用 SO_REUSEPORT 指定的,默认是 multi-reactors,指定 SO_REUSEPORT 的话会切换回 evio 的线程模型。
就是让使用者选择使用哪一个io线程。
比如,在单event loop线程中无锁处理多个端口的多个连接的业务逻辑。 因为不同端口可能是不同的协议,而不同协议的连接之间可能存在业务关联。
比如我想开发一个游戏服务器进程,开启一个tcp端口(接受客户端连接),一个http端口(接收运营web通知,修改玩家金币等等),然后在逻辑是在一个io线程下的(不用加锁),在这个io线程即处理来自客户端的tcp消息,也处理来自http运营的通知消息
最近在清理过期 issues,对于这个问题,我相信 runtime.GOMAXPROCS(1)
可以满足这种无锁处理多个服务的场景,所以就不必把这种复杂性引入框架本身了,既然有了解决方案,就暂时先关掉这个 issue,如果还有问题,随时可以重新打开。
我看evio是可以得 evio.Serve(events, "tcp://192.168.0.10:5000", "unix://socket")