为什么在服务器端使用Java而在客户端使用C#是一个流行的选择?

8
我看过一些例子,这些例子的架构是服务器端使用Java,客户端使用C#。这种组合的优点是什么?为什么不用在两端都使用.NET(或者事实上,在两端都使用Java)会更好呢?
后来又补充了一点:在很多情况下,Java是托管在Windows服务器上的,我认为是通过Tomcat(不确定)。这里的动机是什么?
8个回答

19

Java经常用于后端开发(并已成为事实上的标准),原因如下:

  • Java可以在各种操作系统上透明地运行,从Windows开发工作站到专用的Unix服务器。
  • Java强制执行模块化、面向对象的编程方法,允许编写大规模系统(希望)而不会变得难以管理。(这也适用于C#/.NET,但不适用于其他后端语言,例如Perl或Python)
  • Java经常用于后端系统(一种语言越流行用于特定应用程序,那么该语言就越可能拥有成熟的库和工具供该特定应用程序使用)

C#在Windows中设计UI方面拥有很棒的工具和库。Java的跨操作系统(OS)特性为OS的特殊瑕疵提供了较少的工具,而C#是由Microsoft设计和维护,旨在编写Windows应用程序。


3
顺带一提,我认为这些要点同样适用于Java和.NET...所以我不确定它们是否是"理由",仅仅是因为"Java先到了"解释了很多。.NET/C#在服务器使用中仍然被广泛使用;它不仅限于Windows应用程序。事实上,由于现在很多开发都是基于Web的,你可以说(按数量计算)大多数.NET/C#开发都是在服务器上使用;分为ASP.NET、Mono Rails、WCF服务器、套接字服务器、远程服务器、ASP.NET MVC等等。 - Marc Gravell
除了面向对象的方法之外,其他符号点*不适用于.Net。Java是平台无关的,可以在小型Linux服务器上使用,当需要重型机器时,可以移动到巨大的Solaris或Aix机器上。.Net由Microsoft开发,专为Microsoft设计(Mono是一个不完整、总是赶不上的克隆)。 - nxadm

5
好的,有很多情况下.NET同时被用在两端(我猜Java也是如此)。但是我猜Java服务器/.NET客户端架构背后的动机是:应用程序针对Unix作为服务器操作系统,可能是出于成本或可靠性原因,或者因为它需要适应现有的Unix服务器环境(例如与现有的Unix应用程序紧密合作),但是针对Windows作为客户端平台。(我认为在Windows也被用作服务器平台的情况下,Java可能不那么常见;尽管没有数据来支持这一点。)
如果假定使用Unix服务器操作系统,则Java是一个非常高效的选择,具有大量库的良好支持,但拥有更大的开发人员基础(至少在“企业级”环境中),以及比其他选择(如Perl、Ruby或Python)更多的“管理”认可。
相反,.NET更适合Windows客户端,因为它具有更好的支持用于构建Windows GUI的工具。这不仅仅是工具链:Java GUI API本身(例如Swing)倾向于优先考虑跨平台相似性而不是本地外观和感觉,因此往往导致应用程序看起来或行为不像Windows应用程序。(我在这里有些概括了,抱歉!)

3
数据交换格式(如JSON)使得连接双方的系统使用不同的低级技术变得不那么重要。
Java是一种非常经过测试和支持的服务器语言,而C#则拥有用于构建GUI的优秀工具。

1
简短明了。我个人认为C#正在逐渐在服务器上得到支持,但缺乏跨平台是一个很大的缺陷。Mono复制了大部分.Net,但并非全部或相同。 - kevindaub
关于数据交换:确实。尽管对于系统间通信,XML更为普遍,但像“协议缓冲”这样的可移植二进制格式正在逐渐流行。虽然Java经过了良好的测试和支持;C#/.NET也是如此——但是,像WPF这样的工具确实允许使用C#/.NET进行非常强大的客户端开发。 - Marc Gravell

2

Java被认为更加成熟,这对于服务器是一个很好的特性,而C#在与Windows和Office的集成以及外观方面表现更好(这受到客户的喜爱)。


1

在服务器端,Java已被证明是强大且可扩展的,并且它可以在.NET只能梦想的平台上使用。因此,如果您想要在硬件方面拥有最多选择,Java是一个绝佳的选择 - 这包括具有许多CPU的非常大的机器以及许多集群化的廉价x86盒子。

如果您在服务器端使用.NET,则必须使用Windows,而Windows在硬件方面并不具备良好的可扩展性。


现在十多年过去了,微软进行了转型,.NET Core已经成为主要平台上与Java竞争激烈的强有力的对手。 - Thorbjørn Ravn Andersen

0

大多数服务器都是基于Windows或*nix的。因此,在服务器上,Java或.NET/C#(通过*nix上的mono)都可以完美地使用。

Java对不同客户端设备有更好的支持,但在许多方面,这种要求正在被大多数客户端的更好的HTML支持所取代-至少对于在线设备而言。

对于已安装的客户端应用程序,可以说Java具有更好的可移植性-但是随着诸如Compact Framework、Micro Framework、Silverlight等的出现,.NET正在迎头赶上。

就个人而言(由于工作角色),我主要关心服务器上的内容;.NET/C#从未让我失望-但我不是Java开发人员,因此无法进行直接对比。从开源项目的工作中,我知道有很好的社区人员在服务器上使用mono。

在客户端,像WPF这样的工具提供了一流的GUI体验,而.NET对winforms的支持对于常规的Windows应用程序也很有用。但由于WPF架构的许多部分与Silverlight相同(*nix等的Moonlight作为其mono双胞胎),因此这使得该体验也可以在非Windows客户端上使用。


Mono不能与.Net相比。Mono是一个不完整、过时且总是追赶的克隆品。有人在*nix服务器上使用它,但并不多见。Windows用户更喜欢为一个完整、最新的堆栈(.Net)开发,而Unix用户不想成为二等公民(Mono要追赶进度),因为对于他们的平台存在成熟、经过验证和无风险(专利!)的替代品。如果你关心平台独立性,Java是一种选择,即使在Windows上也是如此。如果你只为Windows编程,.Net是一个选择。 - nxadm
嗯,.NET也是不完整的。如果它是完整的,他们就不会再改变它了!我第一手知道许多人在生产*nix服务器上使用mono。而且肯定有(孤立的)领域,其中mono具有领先优势(例如编译器作为服务)。我认为你过于简单化了“Windows人”与“Unix人”的想法。最终,我们都只是想按照适当的时间/预算/等约束条件完成工作,拿到报酬,然后回家。 - Marc Gravell

0

就Java而言,有两件事情需要注意:

  1. Linux。它可靠且便宜。企业使用大量Linux来运行Java的原因之一是因为他们不必在“补丁星期二”之后重新启动计算机。
  2. Hotspot。它是现代世界的奇迹之一 - 具有惊人的性能。

0

Fortyrunner,我还没有看到过一项基准测试,其中热点JVM能够击败MS CLR。


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