TSimplerServer在while循环中每次接受一个连接,处理连接请求,直到客户端关闭了连接,它才会去接受一个新的连接。由于它只在一个单独的线程中以阻塞I/O的方式完成这些工作,所以它只能服务一个客户端连接,其他所有客户端在被服务器端接受之前都只能等待。其使用方法如下:
TNonblockingServer 使用非阻塞的 I/O 解决了TSimpleServer一个客户端阻塞其他所有客户端的问题。它使用了java.nio.channels.Selector,通过调用select(),它使得你阻塞在多个连接上,而不是阻塞在单一的连接上。当一或多个连接准备好被接受/读/写时,select()调用便会返回。TNonblockingServer处理这些连接的时候,要么接受它,要么从它那读数据,要么把数据写到它那里,然后再次调用select()来等待下一个可用的连接。通用这种方式,server可同时服务多个客户端,而不会出现一个客户端把其他客户端全部“饿死”的情况。
使用方法:
ThreadedSelectorServer允许你用多个线程来处理网络 I/O。它维护了两个线程池,一个用来处理网络 I/O,另一个用来进行请求的处理。使用方法:
TThreadPoolServer有一个专用的线程用来接受连接旦接受了一个连接,它就会被放入ThreadPoolExecutor中的一个 worker 线程里处理。worker 线程被绑定到特定的客户端连接上,直到它关闭。一旦连接关闭,该worker线程就又回到了线程池中。你可以配置线程池的最小、最大线程数,默认值分别是5(最小)和Integer.MAX_VALUE(最大)。使用方法:
完全可以的。thrift是Facebook开源出来的项目,现在交给了Apache来管理。thrift是用来针对不同语言系统之间数据调用的。thrift支持c,c++,Erlang,java,python,ruby,php等语言。thrift允许定义一个简单的定义文件中的数据类型和服务接口,这个文件就是IDL(Interface Definition Language),以作为输入文件,编译器生成代码。简单的说就是thrift定义了统一的文件(对象或者结构体,服务接口),使用thrift的编译器能够生成对应语言的代码文件。thrft之所以是跨语言的原意就是他通过语言无关的自定义语言来生成语言相关的代码。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)