(轻量级)即时通讯:C#.Mono,node.js或其他?

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

  • 应该能够处理许多许多用户(至less为了概念certificate)
  • 协议应该基于json或者二进制数据。 我想json更容易实现和扩展。 由于开销,我不想使用XML。 我知道这不是太多的数据,但应该尽可能快,尤其是在慢速networking(例如移动networking)上。
  • 用户应该能够同时在多个设备上login
  • 历史应保存在服务器端,以便在所有设备上查看
  • 服务器应该保持很多空闲的客户端活着
  • 文件传输(不太清楚如何实现,也许是一个不同的networking套接字,所以它不会阻止客户端的聊天消息)
  • MySQLauthentication

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

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

我已经读了很多关于node.js的知识,而且它的I / O对于networking应用程序和Web服务器来说确实很好。 但即时通讯呢? 主要部分是保存消息并将其代理给其他房间参与者,所以它是“networking”。

我也想过C#,它提供了asynchronous套接字,它使用线程池afaik而不是事件队列。

我不确定哪一个是最有效的IM服务器。

如果有人能给我一个提示,这将是很好的。 我知道C ++可能是最好的方式,但我不知道怎么样,这种语言很难学习。

你可以用任何正常的编程语言(C#,Java,C ++等等)来完成所有这些工作,只要你在这个语言中足够胜任。

任何这些解决scheme都可以。 你可以使用几乎任何语言编写networking代码 – 是的,在像这样的场景中使用它非常酷。

如果你想要一些能让你更容易联网的框架,我build议你试试Erlang,但是单个项目的学习可能很难。 node.js在死连接上的keepalive /资源pipe理和类似的情况下可能会比较棘手。

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

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

Interesting Posts