公司的服务器端使用的是resin做中间件,通过客户端每隔几秒发送请求来进行互动。
这种就应该是短连接了吧?短连接需要频繁的建立与断开连接,是不是对服务器的资源浪费很大?
如果换成长连接呢?长连接的缺点在哪里?

解决方案 »

  1.   

    从网络技术层面来说:TCP本身是长连接的。当然从业务层面来说:每次连接只处理一笔请求的可以称为短连接;处理业务后不断开连接而是等待处理下一笔可以称为长连接。
    至于实际场合究竟需要使用短连接还是长连接,主要看实时性要求、数据流向 和 并发量 这三个问题。由于你没有说明请求关于这三个问题上的特点,所以没法给你具体建议。长连接优点:节约TCP握手时间,可以保证高实时性,数据流向可以采用服务器端的主动推模式。
    长连接缺点:并发量不宜太高,持续占用服务端口(相对消耗资源)。
    我有一个基于长连接推模型的聊天室的简单样例,你可以看看:
    http://blog.csdn.net/ldh911/article/details/7268879
      

  2.   


    明白您说的意思。我再努力描述一下我这边的情况。我做手机游戏服开发,客户端每隔几秒发送一次请求,服务器端就是一个servlet做中转,处理逻辑,然后返回结果。现在我觉得的几个问题是:1.现在游戏中的玩家与玩家之间的聊天无法实现实时性,而且系统有邮件或信息时也不能及时的通知玩家
    2.客户端每隔几秒就会发送一个请求,这样服务器的压力岂不是很大?我想出的一个方案是通过NIO来解决长连接问题和并发量的问题,不知道合不合适,请指教
      

  3.   

    1.现在游戏中的玩家与玩家之间的聊天无法实现实时性,而且系统有邮件或信息时也不能及时的通知玩家
    —— 如果涉及到聊天的话,一般来说还是用长连接会更合适,否则大量时间浪费到握手上了;
    —— 但是手机的网络长连接网络质量可能会比较撮,你需要严重考虑容错和重链机制。
    2.客户端每隔几秒就会发送一个请求,这样服务器的压力岂不是很大?
    —— 压力会比较大,关键是聊天往往对时间的要求很高,如果是团战的话,1秒内没看到信息,可能就会觉得完全受不了了;当然也看你聊天的场景如何,是群聊还是单聊,以后会不会发展为语音啥的;
    NIO没有任何问题,大规模长连接处理的主流都是用NIO;而且也不是Java发明的,本身就是借助了操作系统的网络管理能力。