libhv icon indicating copy to clipboard operation
libhv copied to clipboard

Udp threads

Open mtdxc opened this issue 2 years ago • 4 comments

当前的 UdpServer 是不支持多线程收发消息和负载均衡的,这对大流量的udp媒体服务器是不大合适的; 这个pr利用了SO_REUSEPORT和udp connect机制,可实现单个udp端口的多线程收发;并提供了一个与TcpServer类似的服务模型; 此外,此pr还简单实现了 IpHash 负载均衡策略;

mtdxc avatar Jul 08 '22 04:07 mtdxc

我仔细看了你的提交,非常的精彩,适配了udp connect和多线程收发一个udp端口,并且还添加了IpHash的负载均衡策略,看的出你对libhv掌握的很深。 但是我感觉这个PR不太适合合入主分支(目标适用人群很少,增加了代码复杂度),udp connect的方式不常用,另外udp和tcp不同,udp server只有一个fd,用一个IO线程专门收就够了,然后放入消息队列,用线程池去消费,这样的多线程模型更合理易懂些。

ithewei avatar Jul 08 '22 07:07 ithewei

其实这是我从zlmtookit中借鉴过来的,对udpclient使用多个fd,在linux下,可以由操作系统内核实现多线程收发; 这pr对底层修改已尽量减少了,我看下主要就增设了SO_REUSEPORT套接口选项, 其他都是新增接口和代码,新增的代码都用UdpServer2来与之前的UdpServer来区分, 上面提及的单线程接收+消息队列模型,仍可用UdpSerer来实现, 真就不考虑合主线么?

mtdxc avatar Jul 08 '22 09:07 mtdxc

我就代码风格和命名上添加了一些评论,这个PR后续是否会合入还不确定,需要给出udp connect这种方式的优势和适用场景

ithewei avatar Jul 08 '22 11:07 ithewei

我就代码风格和命名上添加了一些评论,这个PR后续是否会合入还不确定,需要给出udp connect这种方式的优势和适用场景

这个哪里看评论呢,风格我改下。

udp connect的适用场景详见: https://github.com/ZLMediaKit/ZLMediaKit/wiki/ZLMediakit%E7%8B%AC%E5%AE%B6%E7%89%B9%E6%80%A7%E4%BB%8B%E7%BB%8D#6webrtc%E5%8D%95%E7%AB%AF%E5%8F%A3%E5%A4%9A%E7%BA%BF%E7%A8%8B%E6%94%AF%E6%8C%81%E8%BF%9E%E6%8E%A5%E8%BF%81%E7%A7%BB

mtdxc avatar Jul 08 '22 12:07 mtdxc