- 浏览: 801595 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
107x:
不错,谢谢!
log4j.properties配置详解 -
gzklyzf:
为啥我解析的PDF文档没有作者、文章题目等信息啊,下面是我的代 ...
Apache Lucene Tika 文件内容提取工具 -
mervyn1024:
解压密码是啥
ictclas4j调整 -
百卉含英:
如果我的文件输出路径是这个log4j.appender.Fil ...
log4j.properties配置详解 -
lxhxklyy:
mark……
log4j.properties配置详解
java NIO的非阻塞技术实际是采用的观察者模式,为应用程序检测IO端口,当有内容进来时候会通知应用程序。这样,就不必有多个线程傻等着数据的到来了。
“NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做其他的事情,当有事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册过的socketchannel,然后,我们从这个Channel中读取数据,放心,包准能够读到,接着我们可以处理这些数据。
Selector内部原理实际是在做一个对所注册的channel的轮询访问,不断的轮询(目前就这一个算法),一旦轮询到一个channel有所注册的事情发生,比如数据来了,他就会站起来报告,交出一把钥匙,让我们通过这把钥匙来读取这个channel的内容。”
主要的事件包括连接,接收数据。并发送数据。我们以此写一个简单的echo服务器。其主要功能是,接收用户A的输入,并将其回显给所有连接在此服务器上的用户。
很不好意思的,用户A会接受两次回显,为了测试API功能。不过这不重要,不是么?
代码如下(为了便于Copy我只使用了一个类文件);
使用方式:运行服务器端;从多个不同的cmd窗口telnet到服务器端ip的9090端口。在cmd窗口开始输入即可见效果。
package server.tcp.receive;
// $Id: ServerImpCopy.java,v 1.3 2009/03/27 03:59:05 cvsjyy Exp $
import java.io.IOException;
import java.net.BindException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectableChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
import org.apache.log4j.Level;
import org.apache.log4j.Logger; //import server.alarm.NBlockingServer;
import server.log.LoggerFactory;
public class ServerImpCopy implements IServer {
// The port we will listen on
private int port;
// A pre-allocated buffer for encrypting data
private ByteBuffer btBffr;
//
private ServerSocketChannel srvrScktChnnl;
private ServerSocket srvrSckt;
private InetSocketAddress isa;
private Selector selector;
/**
* */
private Logger logger = LoggerFactory.initLogger();
private Queue queue = null;
// private boolean initialFlag = true;
public ServerImpCopy(Queue queue) {
this.queue = queue;
}
/**
* @param port
* The port to set.
*/
public void setPort(int port) {
this.port = port;
}
private void init() throws IOException {
this.btBffr = ByteBuffer.allocate(2048);
this.srvrScktChnnl = ServerSocketChannel.open();
// Set it to non-blocking, so we can use select
this.srvrScktChnnl.configureBlocking(false);
// Get the Socket connected to this channel, and bind it
// to the listening port
this.srvrSckt = srvrScktChnnl.socket();
this.isa = new InetSocketAddress(this.port);
// ss.bind(isa);
try {
srvrSckt.bind(isa);
} catch (BindException e) {
logger.error("Unable to bind to port " + isa);
System.exit(1);
}
// Create a new Selector for selecting
selector = Selector.open();
<s
发表评论
-
保留两位小数
2012-01-13 20:48 1326public static String Baoliu(do ... -
Java 水印
2011-08-27 23:18 1090import java.awt.Color; import ... -
好好看文档
2011-08-16 21:12 1061作为上位机下位机通讯的接口,老z托我写个示例程序。我误以 ... -
中文超链接乱码解决一例(2)
2011-01-07 23:26 2216View层 <%@ page language= ... -
中文超链接乱码解决一例
2010-12-28 22:31 1442中文超链接乱码解决一例 服务器端: St ... -
JVM参数与性能优化
2010-04-17 11:33 1599JVM参数与性能优化 在很多地方都会用到 ... -
主题:我是如何写Service的zz
2010-03-23 20:01 1326主题:我是如何写Service的 zz自:http:/ ... -
ImageMagic
2010-03-10 11:09 1620ImageMagic ImageMagick是一套稳定 ... -
java 修改 Windows 注册表zz
2010-03-08 13:49 1410java 修改 Windows 注册表 项目中用到,整 ... -
BlockingQueue
2010-01-26 12:07 3483public interface BlockingQueue& ... -
ieee754的浮点数问题
2010-01-13 16:16 1312ieee754的浮点数问题 我们在用java的浮 ... -
dbutils入门
2010-01-11 15:49 1515DButils隶属于apache commons,对于一些基本 ... -
每个项目中,你不得不知的11个Java第三方类库
2010-01-05 16:36 1280每个项目中,你不得不 ... -
Java 获得文件编码格式
2009-12-07 15:03 1588Java 获得文件编码格式 转的,不丢人。 imp ... -
反序列化代码……备忘一下……
2009-11-23 21:25 1294package before; import java. ... -
Java反编译工具 jad
2009-10-15 20:11 2658Java反编译工具 jad Java下的一个简单易用的 ... -
log4j.properties配置详解
2009-10-14 11:16 70264log4j.properties配置详解 一、Log4 ... -
java代码保护
2009-08-18 21:16 25411.Java反编译工具:Java Decompiler(JD) ... -
接口和抽象类实例
2009-07-24 10:16 2944以下是抽象类: /** * * 抽象类 ... -
java中的抽象类和接口
2009-07-24 10:01 1056转自:http://www.7880.com/Info/Art ...
相关推荐
12.5 使用原生Window API进行渲染 290 12.5.1 启用原生Window API 290 12.5.2 使用原生Window API 291 12.5.3 用原生window渲染器来更新AVI Player 293 12.5.4 EGL图形库 301 12.6 小结 301 第13章 原生音频...
第1章 Android平台上的C++入门 1.1 Microsoft Windows 1.1.1 在Windows平台上下载并安装JDK开发包 1.1.2 在Windows平台上下载并安装ApacheANT ...第13章 原生音频API 第14章 程序概要分析和NEON优化
21.原生WebSockets 21.1。它是如何工作的 ? 21.2。如何使用 21.3。客户端API 21.4。测试 21.5。常问问题 22.与Wicket的安全 22.1。认证 22.2。授权 22.3。使用HTTPS协议 22.4。URL加密详细 22.5。CSRF保护 22.6。包...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
HttpAsyncClient 的出现并不是为了替换 HttpClient,而是作为一个补充用于需要大量并发连接,对性能要求非常高的基于HTTP的原生数据通信,而且提供了事件驱动的 API。 NIO网络框架 xSocket xSocket是一个轻量级的...
各种EJB之间的调用源码示例,用远程接口的引用访问EJB、函数将被FirstEJB调用,同时它将调用secondEJB 基于JAVA的UDP服务器模型源代码 2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码...
各种EJB之间的调用源码示例,用远程接口的引用访问EJB、函数将被FirstEJB调用,同时它将调用secondEJB 基于JAVA的UDP服务器模型源代码 2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码...