c\s下  soccket模式  (非)阻塞 异步\同步 是不是和服务器有关

解决方案 »

  1.   

    对。
    看服务器那边使用什么模式,比如select模式。
      

  2.   

    Socket通常没有什么模式的概念。
    Java中的Socket类,是TCP协议的一个实现。
    网络通信的双方都要求采用相同的通信协议才可以。阻塞与非阻塞,一般是指,在读写IO数据的两种方式。
    阻塞读,是当IO中没有数据,或者,IO中的数据没有填满应用程序缓冲区的时候,
    调用读方法的线程,会处于阻塞状态。
    非阻塞读,是,无论IO中有没有数据,或者IO中的数据能否填满应用程序的缓冲区,
    所调用的读方法,都会立刻返回。
    网络通信的收发双方,可以采用相同的读写方式,也可以采用不同的读写方式。
    没有什么必须或不必的概念,关键看项目的需求和应用层协议的规定(如果有的话)。同步和异步,通常是指,收发数据后,对数据的处理方式。
    我们知道,通信双方收发数据,主要目的,就是要求接收方处理收到的数据。
    而双方的交互过程,一般也是一问一答的形式。
    比如:登录验证和发送短信两个例子。
    登录验证的过程是,
    首先客户端将验证信息发送至服务端进行验证,
    然后,服务端返回给客户端一个是否通过验证的消息。
    这个过程就完成了一次交互,一问一答,一个Request和一个Response。
    发送短信的过程是,
    首先,客户端将 要发送的短信信息发送到服务端,
    然后,服务端返回给客户端一个是否能够发送的信息。
    这就完成了一次交互,虽然,最终目的很有可能不能达到。
    之后,客户端可以干别的事情了;而服务端会根据刚才客户端发送过来短信信息,将短信发送到目的地。
    当短信到达目的地之后,服务端再给短信的发送方一个短信已到达的消息。我们注意到,同样都是发送数据给对方,让对方进行处理,
    但是,上述两个例子却有着不同。
    登陆验证,在服务端进行验证的过程中,客户端是不能够干其他事情的,
    只有当验证完成后,客户端才能干其他事情。
    这个例子,就是同步处理的例子。
    而,发送短信,只要将你要发送的短信信息传达给服务端就行了,
    其他的事情,自会由服务端进行处理,
    作为短信发送方的客户端,这个时候可以干别的事情,
    而并不是要等待短信到达目的地才可以干别的事情。
    这个例子就是一个异步处理的例子。当然,我只是举个例子说明一下,实际当中,短信的发送也可以采用同步的方式。
    到底采用同步处理还是异步处理,一般也是要看应用场景的。
    而且,并非只出现在服务端,胖客户端的一些程序,
    有时候在客户端也会采用异步处理机制来进行数据的处理。
      

  3.   

    Socket 采用什么形式与服务器没有关联。