我想创建一个简单的客户端/服务器聊天应用程序。
这个想法是,当一个客户端向服务器发送消息时,服务器会将更改通知其他客户端。
无需处理防火墙问题的最佳方法是什么?
可以通过网络服务完成http
吗?
WCF 服务wsHttpBinding
与basicHttpBinding
防火墙配合得很好。您将面临的主要问题是服务器通知客户端可能需要修改某些防火墙设置。
服务器需要监听一个端口。该端口需要通过防火墙进行访问。这两件事是不可避免的。通常你会让你的服务器监听你组成的端口号(大于 1024 以避免冲突)。然后,您将让防火墙将该端口传递到您的服务器。
如果您期望普通人来托管服务器,那么事情会有些棘手。要么你需要他们在他们的家庭路由器上启用端口转发,要么你需要一个集中的服务器来进行匹配。
这就是 Skype 或 Halo 的工作方式(Skype 将中央服务器称为超级节点)。这是一个例子。
C 是中央 Skype 服务器。A是爱丽丝,B是鲍勃。爱丽丝想给鲍勃打电话。
C 监听某个端口,C 的防火墙让它通过
A 登录到 Skype,连接到 C
B 登录到 Skype,连接到 C
A 向 C 发送一条消息,说他们想呼叫 B
C 向 B 发送一条消息(因为 B 已经连接这没关系)这样说。
一旦呼叫被连接,A 和 B 将他们所有的消息发送给 C,C 将它们转发到他们的目的地。
您可以在您的服务器上运行一个 HTTP 服务器,并在每个客户端上为它打开一个连接。