类似聊天和推特应用的并发编程语言

3

我需要创建一个像Facebook聊天和类似Twitter的应用程序的简单聊天系统。

在这种情况下,哪种是最好的并发编程语言?

是Erlang、Haskell、Scala还是其他语言?

谢谢 ^_^


2
Facebook聊天或Twitter绝非“简单”的应用程序,它们是互联网上最复杂的两个应用程序之一。 - user177800
有没有可能使用现成的解决方案,而不是自己开发? - Juliet
8个回答

6

实际上,Twitter 最终完全是一个数据库,与消息传递或路由几乎没有任何关系,而是关于如何存储和检索数据库中的所有推文,这在那个规模下并不简单。 - user177800
除了你看到的东西不再来自数据库,它现在存储在另一种类型的存储器中。 - Tom

4

Erlang是我在这种情况下的首选。但如果你更喜欢JavaScript,也可以考虑使用Node.js。


4

使用Scala/Lift编写的完整聊天应用程序源代码

8分20秒实时、未编辑的网络广播,从头开始编写一个聊天应用程序,使用Scala/Lift。


2
这实际上是一个相对容易解决的问题,可以使用任何具有良好线程支持的语言来完成(例如Java、C#等)。该模型相当简单:
  1. 每个客户端通过AJAX请求连接到Web服务器,服务器配置为不超时;
  2. 如果由于任何原因超时,客户端将配置为发出另一个AJAX请求;
  3. 该AJSX调用的服务器端点在某个监视器上执行线程等待操作以等待更新;
  4. 当用户发送聊天消息时,它会被发送到服务器并通知任何相关的监视器;
  5. 任何监听该监视器的线程都会被唤醒,检索等待它们的任何消息,并将其作为AJAX结果返回给客户端;
  6. 客户端呈现这些消息,然后发出另一个AJAX请求以侦听消息。
这是基本框架,但并非故事的结束。任何可扩展的聊天系统都将支持内部或外部联合(即客户端可以连接到多个服务器),但除非你是Google、Facebook或Twitter,否则你不太可能遇到这个问题。
如果您确实需要这样做,您需要一种像Erlang这样的重型多线程语言来进行服务器之间的通信。当然,Haskell和其他语言也可以胜任。

1
抱歉有点无聊,但是Erlang不是一种多线程编程语言。它支持Erlang进程,而不是线程。 - Gordon Guthrie
@Gordon,我真正想说的是,Erlang是并发导向的,而不是特定地提到线程。 - cletus
2
...但你忘了“线程警察”。我们一直在观察着你,知道吗... :) - Gordon Guthrie

2

4
F# 用于专有解决方案。 - Roberto Aloi
我看过关于Twisted的几个基准测试,它似乎不太适合扩展。它不能利用多个CPU,而且我不确定它支持哪些轮询后端。我们主要将其用于客户端、机器人和其他类似的小型服务,但如果你不期望超过几百个客户端,我想它可能适合你。 - Jonathan Ringstad

2
我建议您看一下Akka(www.akkasource.org)。
它是一个Scala Actor框架,具有为可扩展的后端应用程序提供大量管道的功能。
开箱即用,它支持:
Actor监控 远程actor 集群成员身份 JAX-RS上的Comet(项目大气层) 您服务的HTTP身份验证 分布式存储引擎支持(Cassandra,MongoDB) +更多

1

我会选择Erlang,因为它在支持Comet的应用程序中的效率已经得到了充分证明。

选择像Nitrogen这样的框架,您可以像Jquery执行ajax请求一样轻松地启动Comet请求。


1
如果这只是一个“简单”的应用程序(而且不会承受非常高的负载),那么答案就是使用你已经掌握了具有良好线程处理能力的语言。Erlang、Scala、Clojure、Haskell、F#等都可以很好地完成这样的任务,但Java和C#也同样适用。如果你选择你已经掌握或喜欢的其中一种语言,那么你会做得很好。
如果你想借此机会学习一门新的通用语言,我会选择Scala作为高性能(Erlang通常不是),高度功能化(Java和C#不是),高度可部署(由于在JVM上运行)和相对熟悉(假设你知道类似C的语言)的良好结合。
如果你想借此机会练习容错并发性,那么使用Erlang。这就是它设计的目的,并且它做得非常出色。

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