欢迎来到天天文库
浏览记录
ID:20207668
大小:184.28 KB
页数:18页
时间:2018-10-09
《xsocket使用指南【官方文档翻译】》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、核心功能支持面向流通信主要抽象是Connection接口。通过IBlockingConnection或者INonblockingConnection对象进行数据的读写。在record或者bulk状态中,Connection对象提供了对于特定数据类型的几个方便方法。Connection实现了java.nio包中的GatheringByteChannel和WritableByteChannel接口,如果InputStream或者OutputStream对象被需要,可以使用java.nio.Channels.newInputStream()和java.n
2、io.Channels.newOutputStream()包装channel对象,因为经典的流只有在IBlockingConnection映射到经典的InputStream中时才有阻塞行为。提供的其他类型方法主要是控制连接行为和获取连接信息的方法。比如,远程链接点信息可以获取到,连接的数据冲刷行为可以被控制。这些方法都不是线程安全的。与IBlockingConnection不同的是,INonBlockingConnection在调用read方法直接返回。将IDataHandler对象赋给INonBlockingConnection对象可以使其在新
3、数据到来时被通知。当对应的事件发生时,IDataHandler对象的回调函数会被调用。除了IDataHandler也存在IConnectionHandler对象。服务器端在INonblockingConnection接口上处理接入连接。1、示例:简单TCP服务器首先定义实现了需要的接口(比如,IDataHandler,IConnectHandler,IIdleTimeoutHandler或者IConnectionTimeoutHandler),这个DataHandler会在从连接上接收到数据时被调用。classEchoHandlerimplementsIDataHandler{pu
4、blicbooleanonData(INonBlockingConnectionnbc)throwsIOException,BufferUnderflowException,MaxReadSizeExceededException{Stringdata=nbc.readStringByDelimiter("r");nbc.write(data+"r");returntrue;}}然后创建一个服务器实例,并将上面的DataHandler赋给它//createstheserverbypassingovertheportnumber&handlerIServersrv=new
5、Server(8090,newEchoHandler());//runitwithinthecurrentthread.srv.run();//thecallwillnotreturn//...orstartitbyusingadedicatedthread专用线程srv.start();//returnsaftertheserverhasbeenstarted与run方法对应的,服务器的start方法创建一个专用的线程来运行服务器。start方法在内部阻塞知道服务器启动,为了确保服务器在执行其他进一步操作前被启动,这是比较好的方法。执行服务器的close方法来优雅的关闭服务器。就
6、像其他面向连接的框架,服务器实现了java.io.Closable接口2、DataHandler的onData方法的语义分析IDataHandler的onData方法会在数据分片被接收后直接调用。要注意的是,在网络层,数据可以被分解成若干个TCP片段也可能被组合打包成一个TCP报文。在客户端执行类似于connection.write(“hello”)的写操作,并不意味着一个TCP报文到达服务器端。xSocket通过内部的读缓冲区缓冲接收到的网络数据来隐藏网络行为。在没有足够数据可用的情况下,数据分片会导致NonBlockingConnection的read方法抛出BufferUnd
7、erflowException异常。根据运行模式,在一个挂起的onData方法调用期间没有数据会在网络层被收到。通过使用NONTHREADED模式,xSocket的内部网络I/O线程执行onDataMethod所以不能读取网络层数据。BufferUnderflowException异常不处理是一个惯用的方法,xSocket会在onData方法返回时处理这个异常。classEchoHandlerimplementsIDataHandler{//thismethodwil
此文档下载收益归作者所有