2011-07-16 52 views
1

- 基于网络的聊天系统服务器通过他们的PID区分其客户端,对吗?什么应该用来区分网络上的客户端聊天系统?Erlang网络发布

日Thnx提前

回答

1

我觉得困惑来自概念,即一个Erlang的服务器进程必须活着的每一个人客户。它可以,但如果我没有弄错,Mochiweb不会默认这样做。它只是为每个请求产生一个新的进程。如果你想有一个长期居住的双向客户端< - >服务器进程连接,你可以做到这一点,例如通过;

  • 发送客户端标识符与每个请求并将其映射到服务器上的长期进程。该过程将维护服务器状态,您可以调用它的方法。它仍然是拉而不是推。
  • 使用web套接字实现。不确定Mochiweb是否有一个,但其他Erlang HTTP服务器如Misultin和Yaws提供一个。对于基于Web的聊天系统,我相信网络套接字将是一个非常好的选择。
+0

我使用Misultin websockets,它的工作原理非常完美。问题在于,今天许多浏览器都不支持websocket,因此如果您的聊天系统打算成为消费类产品,那么这可能是一个问题。 – Blacksad

+0

好点,用COMET http://en.wikipedia.org/wiki/Comet_(programming)你可以伪造更好的浏览器支持的网络套接字。这里有一个关于Mochiweb的教程:http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1 –

+0

@WardB:如果Mochiweb为每个连接产生一个新的进程当产生的进程死亡? – Acute

0

对于使用的WebSockets和Misultin你可以看看这个chat demo基于Web的聊天系统的非常简单的例子。它是为了展示一个想法而写的,并不是很优雅,但它确实有效。

4

您使用Web服务器的事实不应该改变太多关于您的模型。你还在建立聊天。您也不想让您的聊天与管理其HTTP连接的进程关系过深。 HTTP连接是短暂的,即使一切进展顺利,并且您正在使用长轮询,也无法保证该连接将与Keep-Alive一起用于下一次长轮询。用户可能还想在多个浏览器窗口,多台计算机上打开相同的聊天。

我还没有任何这些仔细地看了看,但你不是已经建成的网络聊天使用Erlang的第一人: