在做一个socket的通讯服务器时候,每个socket是用同步好还是用异步的模式好?,最好能稍微说点理由

解决方案 »

  1.   

    也可以做成同步的不过最后结果都是在客户端开多个线程,每个线程一个socket和异步一样
      

  2.   

    如果你的客户端连接不是很多,通讯不是很频繁,就做成同步的,毕竟同步编码简单
    反之做成异步的,这样客户端的连接请求和通讯请求就不会堆积阻塞了。看看下面的解释:
    1.所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。
        异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。  
    2.同步,就是实时处理,比如服务器一接收客户端请求,马上响应,这样客户端可以在最短的时间内得到结果,但是如果多个客户端,或者一个客户端发出的请求很频繁,服务器无法同步处理,就会造成涌塞。  
       异步,就是分时处理,服务器接收到客户端请求后并不是立即处理,而是等待服务器比较空闲的时候加以处理,可以避免涌塞。  
    3.同步、异步之经典解释
         同步就是调用一个函数,直接函数执行完了才返回到调用函数
         异步就是被调用函数初始化完后马上返回... 
    经典解释一:
         同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 
         异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
    经典解释二:
         同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
         异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕 
    经典搞笑解释:
          同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。
         异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。 
      

  3.   


    多谢,不过只有前两句是我写的,后面的是copy的
      

  4.   

    isjoe
    说的挺详细的。
    我现在是用同步,线程池管理。每个socket一个线程,还不知道能连多少个socket。