开发无服务器局域网聊天程序,求助!

6

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

去年我曾经开发过TCP、UDP客户端/服务器应用程序项目。它很简单(服务器监听某个端口/套接字,客户端连接到服务器的端口等等...),但我不知道如何开发“无服务器”局域网聊天程序。我该怎么做?UDP、TCP、多播、广播?还是程序应该像服务器和客户端一样运行?


如果有人在这里寻找可行的解决方案,请查看这个,pidgin(多平台)与bonjour / zeroconf。http://www.blog.highub.com/linux/use-bonjour-to-chat-on-ubuntu/ - MGP
3个回答

10
最简单的方法是使用UDP并在整个网络上广播您的消息。 稍微高级一点的版本是仅使用广播来发现网络中的其他节点。
  • 每个节点都维护已知对等节点的列表。
  • 使用TCP将消息发送到所有已知对等节点。
  • 当节点启动时,它会发送一个UDP广播以发现其他节点。
  • 当节点接收到发现广播时,它会向广播源发送“自身”,以使其自我认知。接收节点将广播方添加到其已知对等方列表中。
  • 当节点从网络中退出时,它会发送另一个广播,以通知剩余节点应该从其列表中删除已经离线的客户端。

您还需要考虑处理节点退出而不通知网络其余部分的情况。


1

Spread Toolkit 可能对于你想要的有点过头了,但是它是一个有趣的起点。

从简介中可以看到:


Spread是一个开源工具包,提供了一个高性能的消息传递服务,可以在本地和广域网上实现容错。Spread作为分布式应用程序的统一消息总线,提供高度调整的应用程序级组播、组通信和点对点支持。Spread的服务范围从可靠的消息传递到具有交付保证的完全有序的消息。

Spread可以用于许多需要高可靠性、高性能和强大通信的分布式应用程序中。该工具包旨在封装异步网络的挑战性方面,并使可靠和可扩展的分布式应用程序的构建成为可能。

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

Spread提供的一些服务和优势:

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

0

苹果的iChat是你正在设想的产品的一个很好的例子。它使用Bonjour(苹果的零配置网络协议)来识别局域网上的对等方。然后,您可以与他们聊天或进行音频/视频聊天。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接