C# 在我的例子中,用C语言编写服务器应用程序合理吗? 我希望它能在windows服务器上工作 它将是一个云型服务器-它将由运行在世界各地不同机器上的模块\部件组成,使用http\tcp+upnp相互连接 每台机器上都将有控制\监视\观察模块,以提供性能统计数据 该网络将处理大量视频\音频生活流媒体\广播数据 它将使用FFMPEG进行重新编码,并使用OpenGL、OpenCV等进行过滤(.NET wrappers存在并工作,顺便说一句) 它不会使用任何WCF或IIS 我想在2-4名开发人员和聪明的学生的团队中开发它

C# 在我的例子中,用C语言编写服务器应用程序合理吗? 我希望它能在windows服务器上工作 它将是一个云型服务器-它将由运行在世界各地不同机器上的模块\部件组成,使用http\tcp+upnp相互连接 每台机器上都将有控制\监视\观察模块,以提供性能统计数据 该网络将处理大量视频\音频生活流媒体\广播数据 它将使用FFMPEG进行重新编码,并使用OpenGL、OpenCV等进行过滤(.NET wrappers存在并工作,顺便说一句) 它不会使用任何WCF或IIS 我想在2-4名开发人员和聪明的学生的团队中开发它,c#,c++,c,windows,project-planning,C#,C++,C,Windows,Project Planning,那么,在C#.Net中创建它可以吗?或者我不会把时间浪费在它可以为开发人员提供的方便性承诺上,然后使用C\C++ 那么,在我的例子中,用C#编写服务器应用程序合理吗 Offtop-为什么不使用WCF 警告:这里太主观了 当你有一个大公司,每个服务会话的数据交换量相对较小时,WCF就很糟糕了 当你有视频,现场视频,一切都变得复杂。大量数据、大量用户同时从您的服务中进出 尝试通过http绑定进行实时视频流传输-然后与其他人一起尝试,这样你就会明白为什么我不喜欢使用WCF进行实时流传输的想法-速度很

那么,在C#.Net中创建它可以吗?或者我不会把时间浪费在它可以为开发人员提供的方便性承诺上,然后使用C\C++

那么,在我的例子中,用C#编写服务器应用程序合理吗


Offtop-为什么不使用WCF

警告:这里太主观了

当你有一个大公司,每个服务会话的数据交换量相对较小时,WCF就很糟糕了

当你有视频,现场视频,一切都变得复杂。大量数据、大量用户同时从您的服务中进出

尝试通过http绑定进行实时视频流传输-然后与其他人一起尝试,这样你就会明白为什么我不喜欢使用WCF进行实时流传输的想法-速度很慢,实时流传输信息不需要使用Way2,毕竟你在WCF上见过实时视频流应用程序吗?不-您没有-可能您在Silverlight+IIS对上看到了+-实时视频,我不喜欢,因为它仅用于Silverlight\WindowsMediaPlayer视频流解决方案,而我想要的不仅仅是这些

我喜欢使用reach UI的跨平台客户端。我不喜欢Silverlight+IIS+WCF小组(这都是我个人的观点,所以这是主观的)。那么,我该怎么做呢?直接转到套接字,使用像FLV和Flash这样古老而简单的格式的流作为后端客户端-在某些方面开发更简单,通过网络进行实时视频的方式比现在从MS获得的方式更保守

我喜欢Flash FLV直播,因为您只需打开套接字并开始向其发送实况FLV视频数据(对于每个用户FLV头和FLV“标签”,一个接一个:视频标签、音频标签、视频标签、音频标签等),然后Flash就可以播放它!没有特殊\异常代码。它快速、易于支持,并且不会使客户需要任何新的\不寻常的东西。服务器端的用户可以使用视频/音频数据表示的“标记”形式

所以,这就是为什么我不想使用WCF的原因——很难从客户端播放实时视频,对实时视频服务器没有任何好处

当大部分实时数据通过套接字传输时,为什么还要麻烦使用WCF进行服务管理呢

在2009年下半年和2010年上半年期间,我进入了WCF、实时视频流、silverlight和flash,比较了客户机/服务器创建过程,与一组谨慎有趣的开发人员一起阅读不同的格式。一般来说,在项目结束时,我们有很多小型服务器在传输实时数据,还有很多不同的客户端在接收数据。通过比较我们所做的一切,我们得出的结论与我在这里向大家介绍的结论相近

这就是为什么我不想在最近的项目中使用WCF的原因——我不想考虑如何传递媒体数据,我想专注于它的过滤\编辑


为什么会出现这个问题

我们开始在C中使用FFmpeg\OpenCV,使用它们操作数据非常简单。。。在C。。。在Linux上


但是当我们开始使用.Net绑定(我们现在使用的是Tao.FFmpeg)时,我们发现在大多数情况下,我们最终使用了大量的C#封送,并且有两个变量用于其C模拟(指针问题)等等。我希望Emgu CV不会出现这样的问题,但是steel这让我有点担心……

如果您想要C#和跨平台能力,您的开发将必须针对Mono平台(或者另一个跨平台.NET运行时,如果您能找到的话)。您可能不得不放弃VisualStudio,或者放弃一些特定于Microsoft的库和工具,但您仍然可以在多个平台上使用C#。只需确保在过程中尽早开始多平台构建和测试,否则以后将很难做出改变。

我认为这是完全合理的。C开发的好处将大大超过不使用C++的性能缺陷。

C一般比C++跨平台多。的确,C++是跨平台语言,但是C++程序用来与系统交互的API之间存在很大的差异。C#和.Net/Mono与套接字层的接口更加标准化


最后,对于这样雄心勃勃的项目,将项目转化为可用的形式比获得尽可能高的性能更为重要。只有当项目完成时,绩效才重要。用C#写出来,因为这会给你最大的完成几率。然后再担心性能。

我不太清楚为什么人们会提出跨平台问题,因为OP明确表示该应用程序将在Windows上运行

至于实际问题

  • 您能否构建一个服务器应用程序,通过C#中的tcp/http进行通信,而不必在IIS中运行。->对
  • 您能否构建一个在C++中性能和可扩展的服务器应用程序?->是的
  • 你能和学生一起做吗。取决于学生……;)但这与使用的语言无关
  • 我会这么做吗?对我们已经做到了。我们现在有一个c#应用程序运行在大约20000台机器上,通过tcp进行有效通信。我们没有使用WCF,但我们使用了