一个SocketServer接受多个SocketClient发送的数据,用阻塞方式好还是用非阻塞方式好,要求实时性高一些的。最好能给出理由,谢谢了!
还有呀:我只知道阻塞和非阻塞的区别是:一个是同步另一个是异步,还有什么本质区别吗?用过的兄弟给讲讲好吗

解决方案 »

  1.   

    在WinSock中存在两种传输模式“阻塞”和“非阻塞”的概念。
    一般都采用非阻塞方式。
    在客户端,如果把 ClientType特性设置为ctNonBlocking,表示采用非阻塞方式进行连接。当服务器端 Socket试图进行读/写操作的时候,客户端 Socket就会得到通知,即OnRead或者OnWrite事件。对于服务器端Socket来说,如果把ServerType特性设置为 StNonBlocking,表示采取非阻塞方式进行连接。当客户端 Socket试图进行读/写的时候,服务器端Socket就会得到通知,即OnClientRead或者OnClientWrite事件。与非阻塞方式不同的是,在阻塞方式下没有诸如OnRead或者OnWrite等异步事件。Socket必须主动去读或者写数据。在读写操作完成之前,其他代码都无法执行,成为了纯粹的独占使用方式,整个应用程序将处于等待状态,大大降低应用程序的性能。对于客户端Socket来说,如果把 ClientType特性设置为ctBlocking,表示采取阻塞方式进行连接,为了尽可能的减少阻塞方式的负面影响,可以把所有涉及到读写的操作放在一个单独的线程中,这样可以使其他的线程可以继续得到执行。对于服务器端 Socket来说,如果把ServerType设置为stThreadBlocking,表示采取阻塞方式进行连接。Delphi 中将为每一个阻塞方式的连接自动分配一个新的线程,这样即使一个客户正在进行读写操作,其他的客户也不必等待
      

  2.   

    哪我的问题【一个SocketServer接受多个SocketClient发送的数据,需要一定的时时性】到底使用那种方式好呢?