- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
核心功能
支持面向流通信主要抽象是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通过内部的读缓冲区缓冲接收
文档评论(0)