代码之家  ›  专栏  ›  技术社区  ›  xRobot

用于聊天和类似Twitter的应用程序的并发程序语言

  •  3
  • xRobot  · 技术社区  · 15 年前

    我需要创建一个简单的聊天系统,如Facebook聊天和类似Twitter的应用程序。 在这种情况下,最好的并发程序语言是什么?

    二郎,哈斯克尔,斯卡拉或者其他什么?

    谢谢^ ^ ^

    8 回复  |  直到 14 年前
        1
  •  6
  •   Don Stewart    15 年前

    像Facebook聊天这样的聊天系统

    facebook聊天是用erlang写的, http://www.facebook.com/note.php?note_id=14218138919

    以及类似Twitter的应用程序

    什么方面?邮件传递?网络前端?最终都是消息路由。haskell最近被用于两个实时生产交易系统,使用大量的多核并发。 http://www.starling-software.com/misc/icfp-2009-cjs.pdf

    更相关的是:规模是多少:您希望同时服务多少用户?

        2
  •  4
  •   Jon Gretar    15 年前

    二郎是我选的那种药。但是,如果您对javascript更满意的话,我也会查看node.js。

        3
  •  4
  •   Daniel C. Sobral    15 年前

    完成聊天应用程序 source code 使用scala/lift。

    8分20秒实时,未编辑, webcast 使用scala/lift从头开始编写聊天应用程序。

        4
  •  2
  •   cletus    15 年前

    这实际上是一个比较容易解决的问题,可以用任何有礼貌的线程支持的语言来完成(包括Java、C等)。模型相当简单:

    1. 每个客户机通过服务器上配置为不超时的Ajax请求连接到Web服务器;
    2. 如果由于任何原因超时,客户机被配置为发出另一个Ajax请求;
    3. 该AJSX调用的服务器端点在一些等待更新的监视器上执行线程等待操作;
    4. 当用户发送聊天时,它被发送到服务器,并且任何相关的监视器都会收到信号;
    5. 监听该监视器的任何线程都会被唤醒,检索等待它们的任何消息,并将其作为Ajax结果返回给客户机;
    6. 客户机呈现这些消息,然后发出另一个Ajax请求来监听消息。

    这是基本框架,但并不是故事的结尾。任何可扩展的聊天系统都支持内部或外部联盟(这意味着客户端可以连接到多个服务器),但是除非你是谷歌、Facebook或Twitter,否则你不太可能有这个问题。

    如果需要,则需要某种消息队列/总线来进行服务器间通信。

    这是您需要的一个重型多线程语言,如Erlang,但它,Haskell和其他人当然可以做到。

        5
  •  2
  •   Pratik Deoghare    15 年前
        6
  •  2
  •   Viktor Klang    15 年前

    我建议你看看阿卡( www.akkasource.org )

    它是一个scala-actor框架,具有大量的管道系统,用于生成可伸缩的后端应用程序。

    它支持的开箱即用:

    演员监督 远程行动者 群集成员身份 JAX-RS上的彗星(项目大气) 服务的HTTP身份验证 分布式存储引擎支持(Cassandra、MongoDB) +更多

        7
  •  1
  •   Berzemus    15 年前

    我会选择Erlang,它在支持Comet的应用程序中的效率在很大程度上得到了证明。

    使用一个框架,比如氮气,可以像jquery和ajax一样轻松地启动Comet请求。

        8
  •  1
  •   Rex Kerr    15 年前

    如果它真的是一个 简单的 应用程序(而不是在非常高的负载下),那么答案是使用您已经知道的具有合适线程的任何语言。Erlang,斯卡拉,Culjule,Haskell,F.Y.等等,在这样的事情上都做得很好,但是Java和C是这样做的。如果你选择你知道和/或喜欢的任何一个,你都会好起来的。

    如果你用这个来学习一种新的普遍有用的语言,我会选择斯卡拉作为一个很好的混合高性能(Erlang不是一般的,虽然它是高效并发的奇妙),高功能(Java和C不),高度可部署(由于运行在JVM上),并且相当熟悉(假设你知道)。c-ish语言)。

    如果您将此作为练习容错并发的借口,请使用erlang。这就是它的设计目的,它做得非常好。