C# 全球聊天应用程序的正确编程模式是什么?

C# 全球聊天应用程序的正确编程模式是什么?,c#,network-programming,C#,Network Programming,我正在尝试用c#构建一个聊天应用程序,它可以在广域网网络中工作。 应用程序中有两个面。服务器端和客户端。 在我看来,从客户端到客户端的每一条消息都需要传递到服务器,服务器会将其转发到正确的des客户端。客户之间的交流不会直接进行。 这是正确的型号吗? 如果是,服务器是否需要一个能监听所有客户端的套接字?(因为每个客户端都将其消息发送到服务器上的同一端口)。 服务器能否在同一端口上管理数百万条消息?看看Signal和使用Signal实现的聊天系统,Jabbr: 我认为这取决于你想要完成什么,每个

我正在尝试用c#构建一个聊天应用程序,它可以在广域网网络中工作。 应用程序中有两个面。服务器端和客户端。 在我看来,从客户端到客户端的每一条消息都需要传递到服务器,服务器会将其转发到正确的des客户端。客户之间的交流不会直接进行。 这是正确的型号吗? 如果是,服务器是否需要一个能监听所有客户端的套接字?(因为每个客户端都将其消息发送到服务器上的同一端口)。
服务器能否在同一端口上管理数百万条消息?

看看Signal和使用Signal实现的聊天系统,Jabbr:


我认为这取决于你想要完成什么,每个选择都有自己的优缺点。
例如:

使用集中式服务器可以跟踪消息,哪些用户在线等。。。但您必须管理每个连接的端口(有关详细信息,请参阅答案末尾的说明)

使用P2P模型,您将不会遇到集中式服务器所需的瓶颈和管理,但管理非集中式系统可能会更麻烦(具体取决于您想要实现什么)

如果您打算采用集中式设计,通常您会有一个服务器,该服务器带有一个端口,用于侦听请求。
一旦用户想要连接,服务器将为客户端启动一个新线程,并为其分配一个端口(线程通常来自线程池,端口来自特定端口范围)。

这将允许用户以非阻塞方式与服务器通话,并允许多个用户同时使用该服务。

有很多方法可以做到这一点。您应该研究一下非阻塞IO解决方案,如node.js和vert.x.signar,因为我读到的是web应用程序,对吗?我正在构建的聊天不是一个web应用程序。嗯,是和否;-)例如,您可以在控制台应用程序中使用它自己托管。正如我在您的其他评论中看到的,您计划使用中央服务器,然后Web服务器或自托管应用程序将是一个很好的解决方案。(:是的,我的方向是使用集中式服务器。可能在服务器端存储一个端口,该端口将侦听协议消息,如connect req等。文本消息将在客户端之间直接发送?让客户端知道他正在与之交谈的客户端的公共ip可以吗?您的意思是在se为每个客户端提供一个uniqe端口服务器端?@AviThalker是的,我的意思是为每个客户端提供一个池中唯一的端口。关于让每个客户端知道客户端的IP,这真的取决于你。例如Skype使用P2P,这意味着客户端知道其他客户端。非常感谢!我想我会尝试在客户端之间使用P2P的集中式服务器,以便文本/语音消息将在客户端之间直接传输,协议消息将发送到服务器。