有点小白的问题:用Java写服务器和用C++写服务器(TCP服务器或者是UDP服务器等等)主要区别是什么,仅仅是效率的问题吗?? 如果要达到高性能并发是不是只能用C++?请高手指点一下

解决方案 »

  1.   

    nono  nio 可以实现 ,效率也很高的
      

  2.   

    Java的效率可以非常高,我实测过的,用Netty的。如果你是做XML over TCP的接口,推荐利用Camel、Netty、及XmlSocketUtility这样用:XmlSocketUtility.addServer(
    camelContext, // The CamelContext
    "tcp://localhost:9000", // The listening port
    false, "seda:input", // Destination of the messages received.
    // The combination of false and seda: can be used
    // for multi-threaded processing.
    // If single-threaded processing is desired, then use
    // the combination of true and direct: instead.
    "env:Envelope", // The top level tag of the XML messages
    Charset.forName("GB2312"), // Encoding of the XML message
    5000); // Possible maximum length of the messages可以既提高开发效率,又保证运行效率。
      

  3.   

    java的优势之一就是tcp性能优越...
      

  4.   

    以下是我以前发给同事的一个老邮件,可证瓶颈会发生在网卡驱动上,或者是业务逻辑上,而不在Java nio里:我在一台Windows 2003 Server的PC机上测试了基于Netty的Java下的网络并发连接吞吐。Client与Server都在本机,没有通过外部的物理网络。Client向Server进行的连接按照间隔30ms来加压。(如果不加入此延时,有一定的概率会连接不上),直到20000个并发连接成功建立。Client与server一旦连接上,双方就不断地轮流发256字节的数据,中间没有加入延时。因为在后续增加连接的过程中,前面建立的连接已经在互发数据了,所以可以认为稳定性已经在不断测试中。注册表需要修改或添加,否则最多连接到3900多就不行了。修改完之后要重新启动才能生效。修改的是HK_LM->System->CurrentControlSet->Services->Tcpip->Parameters->MaxUserPort,设置为了25000。
     运行起来之后,检查操作系统的性能指标发现:l          Handles数量线性增长l          CPU一开始就用满l          Threads, Processes, Memory都基本没什么增长l          瑞星网络助手显示收、发流量均大约在30GB/s左右(瑞星显示的是大写的“B”)
     连接数达到15000左右的时候,瑞星显示下载速率大约45GB/s,上传速率29GB/s。手工用telnet连接上去会觉得建立连接有几秒的等待,request与response之间有小于1秒的延时。整个运行期间程序没有任何报错。 连接数超过20000后,又运行了一段时间,这时,瑞星显示下载速率大约60GB/s,上传速率29GB/s。手工用telnet连接上去的感觉同先前差不多。整个运行期间程序没有任何报错。 到关闭程序之前,总传输字节数(只记单向)已超过6TB。
      

  5.   

    要测压力第一点就是别用windows....
    再有就是...测压力不是你这么测的吧...以单台机器来说,TCP客户端最多可以发起3977个,而每个TCP至少1K内存的控制块,非Server版的默认支持1000个TCB控制块,SERVER的默认2000个
    压力测试么应该是在几个连接上测数据流量和稳定性啊你这个要测几W个并发连接的,就不是一台机器的问题了,至少也要有个负载均衡的前端后分布式的后端组了....
      

  6.   

    你没认真看我写的东西吧?首先,这些都是实测结果,不是杜撰。第二,我说清楚了是用2003 server,而且改了注册表以增加最大连接数限制。第三,我的client与server都在localhost,他们直接的连接是经过了TCP/IP协议栈的。第四,根据测试结果,只要网卡够强,单机对单机跑几万个并发连接是不成问题的。
      

  7.   

    在一台机器就更难测了,还是我说的看不懂那...
    客户端连接不需要端口号吗?
    TCB控制块不需要内存吗?哎,算了,当我啥都没说吧
      

  8.   


    看这句话:“注册表需要修改或添加,否则最多连接到3900多就不行了。修改完之后要重新启动才能生效。修改的是HK_LM->System->CurrentControlSet->Services->Tcpip->Parameters->MaxUserPort,设置为了25000。
      

  9.   

    c++ 效能高些,我公司就是用c++,也用java試過。c++強。
      

  10.   

    谢谢各位的回答,我刚接触到服务器方面,很多地方还是很空白。Java有个好处就是跨平台吧,可以在windows下跑,也可以在linux下跑。搜了一些资料,有人推荐QuickServer  像楼上推荐的netty Camel 啥还没挺过呢,太孤陋寡闻了我。
    要多多像楼上学习了。