6

我想开发简单的无服务器局域网聊天程序只是为了好玩。我怎样才能做到这一点 ?我应该使用什么类型的架构?

去年我从事 TCP、UDP 客户端/服务器应用程序项目。它很简单(服务器侦听某些端口/套接字,客户端连接到服务器的端口等。)但我不知道如何开发“无服务器”局域网聊天程序。我怎样才能做到这一点?UDP,TCP,组播,广播?还是程序的行为应该像服务器和客户端一样?

4

3 回答 3

10

最简单的方法是使用 UDP 并在整个网络上简单地广播您的消息。更高级的版本是只使用广播来发现网络中的其他节点。

  • 每个节点都维护着一个已知对等点的列表。
  • 消息通过 TCP 发送到所有已知的对等点。
  • 当一个节点启动时,它会发出一个 UDP 广播来发现其他节点。
  • 当一个节点接收到一个发现广播时,它会将“自己”发送到广播源,以使其自知。接收节点将广播者添加到它自己的已知对等点列表中。
  • 当一个节点从网络中退出时,它会发送另一个广播,以通知其余节点它们应该从列表中删除被丢弃的客户端。

您还必须考虑在不通知网络其余部分的情况下处理节点的退出问题。

于 2008-12-20T21:05:52.667 回答
1

传播工具包对于您想要的东西可能有点矫枉过正,但是一个有趣的起点。

从简介:


Spread 是一个开源工具包,它提供了一种高性能的消息传递服务,该服务对跨局域网和广域网的故障具有弹性。Spread 用作分布式应用程序的统一消息总线,并提供高度调整的应用程序级多播、组通信和点对点支持。传播服务的范围从可靠的消息传递到具有传递保证的完全有序的消息。

Spread 可用于许多分布式应用程序,这些应用程序需要在各种成员子集之间进行高可靠性、高性能和鲁棒的通信。该工具包旨在封装异步网络的挑战性方面,并支持构建可靠且可扩展的分布式应用程序。

Spread 由与用户应用程序链接的库、在作为处理器组的一部分的每台计算机上运行的二进制守护程序以及各种实用程序和演示程序组成。

Spread提供的一些服务和好处:

  • 可靠且可扩展的消息传递和群组通信。
  • 一个非常强大但简单的 API 简化了分布式架构的构建。
  • 易于使用、部署和维护。
  • 从一个局域网到复杂的广域网的高度可扩展性。
  • 支持具有不同成员集的数千个组。
  • 在出现机器故障、进程崩溃和恢复以及网络分区和合并的情况下启用消息可靠性。
  • 为消息提供一系列可靠性、排序和稳定性保证。
  • 强调稳健性和高性能。
  • 完全分布式算法,没有中心故障点。
于 2008-12-20T21:34:21.660 回答
0

Apples iChat 就是您所设想的产品的一个示例。它使用 Bonjour(苹果的零配置网络协议)来识别 LAN 上的对等点。然后,您可以与他们聊天或音频/视频聊天。

我不完全确定 Bonjour 在内部是如何工作的,但我知道它使用多播。客户端在 LAN 上“注册”服务,Bonjour 协议允许每个主机为给定服务提取主机目录(所有这些都无需中央管理)。

于 2009-02-27T17:07:55.333 回答