KumoKyaku / kcp

KCP C#版。线程安全,运行时无alloc,对gc无压力。
MIT License
832 stars 136 forks source link

请教开多个KCP如何共用一个UDPClient收发消息的问题 #35

Closed segatecm closed 2 months ago

segatecm commented 2 months ago

首先感谢下作者的工作,省了我很多时间。 其次想请教个问题,服务器端如果创建多个SimpleKcpClient对象对应多个客户端。 我看代码里面需要用UDPClient来收发消息。但是UDPClient只能有一个来绑定端口,所以没法创建多个SimpleKcpClient。 如果改成多个KCP来共用一个UDPClient,当receive的时候,怎么判断哪个数据包对应哪个KCP对象?

KumoKyaku commented 2 months ago

你看看法完全正确,这是所有人的都会遇到的问题。demo和工程实践还有很远一段距离,需要写更多的代码。 首先,我推荐你用QUIC,如果没有条件时,才使用kcp。QUIC质量和易用性都比kcp要好。

服务器用一个UDPClient接受所有客户端的消息,根据收到的远端ip区分是哪个客户端。(有个额外的认证过程,用于ip和客户端id绑定) 服务器有一个池,大约5~20个UDPClient用于向客户端发送消息。在服务器侧,接受和发送时使用不同的UDPClient工作的,用于减轻socket收发压力。但是遇到NAT环境,则必须收发使用同一个。 https://github.com/KumoKyaku/Megumin.Net 这里有写好的kcp例子。不算最佳实践,但是能达到商业项目级别。

segatecm commented 2 months ago

谢谢,我觉得应该试试Quic。因为项目需要使用C#,你觉得 Quic.NET这个项目怎么样?质量能不能商用?

KumoKyaku commented 2 months ago

https://github.com/KumoKyaku/kcp/issues/34#issuecomment-2260162003

segatecm commented 2 months ago

好的,多谢!