文档详情

xsocket使用指南【官方文档翻译】.pdf

发布:2025-04-06约2.45万字共18页下载文档
文本预览下载声明

核心功能

支持面向流通信主要抽象是Connection接口。通过IBlockingConnection或者

INonblockingConnection对象进行数据的读写。在record或者bulk状态中,

Connection对象提供了对于特定数据类型的几个方便方法。

Connection实现了java.nio包中的GatheringByteChannel和

WritableByteChannel接口,如果InputStream或者OutputStream对象被需要,可

以使用java.nio.Channels.newInputStream(readableChannel)和

java.nio.Channels.newOutputStream(writeableChannel)包装channel对象,因为

经典的流只有在IBlockingConnection映射到经典的InputStream中时才有阻塞行

为。

提供的其他类型方法主要是控制连接行为和获取连接信息的方法。比如,远

程链接点信息可以获取到,连接的数据冲刷行为可以被控制。这些方法都不是线

程安全的。

与IBlockingConnection不同的是,INonBlockingConnection在调用read方法

直接返回。将IDataHandler对象赋给INonBlockingConnection对象可以使其在新

数据到来时被通知。当对应的事件发生时,IDataHandler对象的回调函数会被调

用。除了IDataHandler也存在IConnectionHandler对象。

服务器端在INonblockingConnection接口上处理接入连接。

1、示例:简单TCP服务器

首先定义实现了需要的接口(比如,IDataHandler,IConnectHandler,

IIdleTimeoutHandler或者IConnectionTimeoutHandler),这个DataHandler会在从

连接上接收到数据时被调用。

classEchoHandlerimplementsIDataHandler{

publicbooleanonData(INonBlockingConnectionnbc)

throwsIOException,

BufferUnderflowException,

MaxReadSizeExceededException{

Stringdata=nbc.readStringByDelimiter(\r\n);

nbc.write(data+\r\n);

returntrue;

}

}

然后创建一个服务器实例,并将上面的DataHandler赋给它

//createstheserverbypassingovertheportnumberhandler

IServersrv=newServer(8090,newEchoHandler());

//runitwithinthecurrentthread.

srv.run();//thecallwillnotreturn

//...orstartitbyusingadedicatedthread专用线程

srv.start();//returnsaftertheserverhasbeenstarted

与run方法对应的,服务器的start方法创建一个专用的线程来运行服务器。

start方法在内部阻塞知道服务器启动,为了确保服务器在执行其他进一步操作前

被启动,这是比较好的方法。

执行服务器的close方法来优雅的关闭服务器。就像其他面向连接的框架,

服务器实现了java.io.Closable接口

2、DataHandler的onData方法的语义分析

IDataHandler的onData方法会在数据分片被接收后直接调用。要注意的是,

在网络层,数据可以被分解成若干个TCP片段也可能被组合打包成一个TCP报

文。在客户端执行类似于connection.write(“hello”)的写操作,并不意味着一个TCP

报文到达服务器端。xSocket通过内部的读缓冲区缓冲接收

显示全部
相似文档