(轻量级)Instant Messenger:C#.Mono,node.js还是其他?

时间:2011-05-31 12:29:54

标签: c# node.js mono instant-messaging

我应该使用哪种编程语言编写Instant Messenger? 以下是目标:

  • 应该能够处理许多用户(至少是为了概念验证)
  • 协议应基于json或二进制数据。我想json更容易实现和扩展。由于开销,我不想使用XML。我知道数据并不多,但它应该尽可能快,尤其是在慢速网络(例如移动设备)上。
  • 用户应该能够同时登录多个设备
  • 历史记录应保存在服务器端,以便可以在所有设备上查看
  • 服务器应该让很多空闲客户端活着
  • 文件传输(不太确定如何实现,可能是不同的网络套接字,因此它不会阻止客户端的聊天消息)
  • MySQL auth

(不,XMPP不是一个选项)。

我是一名具有丰富PHP经验的Web开发人员,但这不是此项目的选项。我也有使用Javascript(主要用于网站)的经验,但我很容易使用node.js而且我对C#.Net几乎没有经验,也可以编写C#.Mono。我想写的服务器应该在Linux上运行。我没有使用Java的经验,但如果这是我学习它的最佳方式。

我已经阅读了很多关于node.js的内容,并且它的I / O非常适合网络应用程序和Web服务器。但即时通讯呢?主要部分是保存消息并将其代理给其他房间参与者,因此它是“网络”。

我还想过提供异步套接字的C#,它可以使用线程池afaik而不是事件队列。

我不确定哪种方式对IM服务器最有效。

如果有人能给我一个提示,那就太好了。我知道C ++可能是最好的方式,但我不太喜欢那种语言,而且很难学习。

2 个答案:

答案 0 :(得分:5)

你可以用任何普通的编程语言(C#,Java,C ++等)来完成所有这些,只要你能够胜任这种语言。

答案 1 :(得分:0)

任何这些解决方案都可以。您可以用几乎任何语言编写事件网络代码 - 是的,在这样的场景中使用它非常酷。

如果你想要一些可以提供更简单网络的框架的东西,我建议你尝试使用Erlang,但是对于一个项目来说可能很难学习。对于死连接上的keepalive /资源管理以及你没有真正得到事件的类似场景,node.js可能会很棘手。

如果你已经熟悉c#,使用mono可能是最安全/最快的事情。除此之外 - 你可以用任何语言写任何东西 - 只需使用你所熟悉的东西(除非你真的想学习新东西)。

我不知道你为什么写jabber不是一个选项,但如果它只是你不想要的xmpp技术,为什么不使用典型的SIP代理/服务器呢? (例如OpenSIPS)MESSAGE请求处理,订阅,授权(使用db)和keepalive已经可用。您可以以任何您想要的方式扩展/集群/分割OpenSIPS。