哪种更健壮,可扩展的方法?

时间:2012-04-08 17:06:59

标签: multithreading chat fork distributed-system

我正在实施分布式聊天系统,在这个系统中我们有以下选择:

  1. 使每个节点上运行的客户端和服务器作为单独的线程运行。充当接收器的服务器将作为守护程序线程运行,客户端将用户输入作为普通线程运行。

  2. 为客户端分叉两个进程,为服务器分一个进程。

  3. 我无法推断出哪一个继续进行。任何见解都会很棒!

2 个答案:

答案 0 :(得分:1)

只需在接收数据并将它们放入正确队列的线程中创建n个工作者,将数据推送到客户端的工作人员以及从队列处理数据的工作人员,就可以以“可扩展”的方式完成。

n工人获取数据 m工人推送数据 k工人处理数据和跟踪状态 传入消息队列 输出消息阙

这样你就可以找到最好的(n,m,k)。这里唯一的问题是在没有任何错误的情况下实现它并不是一件容易的事。您可以将工作类型的数量减少到两个,传入消息和进程+推送并使用redis(redis.io)中的列表作为队列。但是这仍然需要大量的测试覆盖率:)祝你好运

实际上你可以使用websockets。像socket.io http://socket.io/或faye http://faye.jcoglan.com/

这样的东西

只需为聊天创建前端:)这将以真正可扩展且可用的方式解决您的大部分问题。

答案 1 :(得分:0)

他们两个都同样糟糕。您实际上想要在I / O上进行多路复用。在Erlang中,这是微不足道的,这是在Erlang中编程的唯一方法。在Python中,您可以使用Twisted或gevent或类似的东西。 Ruby有EventMachine。 Java有NIO。 C有解放。等