`
maozilee
  • 浏览: 252645 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

基于XSocket框架的socket编程技巧(同步通信)

阅读更多

基于XSocket框架的socket编程技巧(同步通信)

最近在做socket通信编程,现总结如下,关于XSocket的大话就不再多说了,google一下一大片。

一、  Server端

Socket监听如下:

ServerHandler handler = new ServerHandler();

//创建一个服务端的对象  

IServer srv = new Server(address, port, handler);

//设置当前的采用的异步模式  

srv.setFlushmode(FlushMode.ASYNC);

//设置连接的超时时间和最大空闲时间

srv.setConnectionTimeoutMillis(5000);

srv.setIdleTimeoutMillis(10000);

//启动监听

srv.start();

 

其中如下两个方法的设置与ServerHandler的实现有关系,

srv.setConnectionTimeoutMillis(5000);

srv.setIdleTimeoutMillis(10000);

 

下面再看ServerHandler吧

public class ServerHandler implements IDataHandler, IConnectHandler,
    IIdleTimeoutHandler, IConnectionTimeoutHandler, IDisconnectHandler
{
  public boolean onConnect(INonBlockingConnection nbc) throws IOException,
      BufferUnderflowException, MaxReadSizeExceededException
  {
    return true;
  }
  public boolean onDisconnect(INonBlockingConnection nbc) throws IOException
  {
    return true;
  } 
  public boolean onData(INonBlockingConnection nbc) throws IOException,
      BufferUnderflowException, ClosedChannelException,
      MaxReadSizeExceededException
  {
    return true;
  }
  public boolean onIdleTimeout(INonBlockingConnection connection)
      throws IOException
  {  
      System.out.println("onIdleTimeout");
    return false;
  }
  public boolean onConnectionTimeout(INonBlockingConnection connection)
      throws IOException
  {
      System.out.println("onConnectionTimeout");
    return true;
  }

 

ServerHandler分别实现了以下接口

IDataHandler, IConnectHandler,IIdleTimeoutHandler, IConnectionTimeoutHandler, IDisconnectHandler

 

其中主要说一下IDataHandlerIIdleTimeoutHandlerIConnectionTimeoutHandler吧。

 

首先说明一下,socket连接的生命周期与server端的connectionTimeoutidleTimeoutclient端有关系。

 

A、 IDataHandler中的事件onData事件就是处理业务逻辑的,当客户端发送一个业务请求时,会触发此事件。

B、 IIdleTimeoutHandler中的onIdleTimeout事件是在socket连接空闲超时被触发,这个超时时间就是刚刚srv.setIdleTimeoutMillis(10000)设置的值“10000”,单位毫秒。此事件返回一个bool状态,

  (1)   如果返回truexsocket则认为这事件已经关闭了此连接,那么我们在此事件中是否去关闭连接了呢?前面说了这个连接的生命周期和与server端的connectionTimeoutidleTimeoutclient端有关,如下解释,

1)、如果close();,那么就不多说了;

2)、如果没有close();,此时又和IConnectionTimeoutHandler的事件onConnectionTimeoutclient有关。如果onConnectionTimeout返回false,则此事件被触发并在事件结束后,则xsocket关闭连接;如果onConnectionTimeout返回true,则此连接由client负责关闭。

  (2)   如果返回false,相当于onIdleTimeout没有做任何处理,则此时又和IConnectionTimeoutHandler的事件onConnectionTimeout有关。如果onConnectionTimeout事件返回true,则onIdleTimeout事件被触发并在事件结束后由xsocket关闭连接;如果onConnectionTimeout事件返回false,则onConnectionTimeoutonIdleTimeout任何一个事件被触发后就会由xsocket关闭连接。

 

C、 IConnectionTimeoutHandler中的onConnectionTimeout事件是在socket建立连接后,经过srv.setConnectionTimeoutMillis(5000)这个方法中的值时间后触发此事件,强调是指建立连接时,不是指上一次通信时间。此事件返回一个bool状态:

 

  (1)   如果返回true,如下解释,

IIdleTimeoutHandler的事件onIdleTimeoutclient有关。如果onIdleTimeout返回false,则在onIdleTimeout事件被触发并在事件结束后,则xsocket关闭连接;如果onIdleTimeout返回true,则此连接由client负责关闭。

  (2)   如果返回false,解释如下:

IIdleTimeoutHandler的事件onIdleTimeout有关。如果onIdleTimeout事件返回true,则onConnectionTimeout事件被触发并在事件结束后由xsocket关闭连接;如果onIdleTimeout事件返回false,则onConnectionTimeoutonIdleTimeout任何一个事件被触发后就会由xsocket关闭连接。

 

终上,关于在服务器端socket连接的生命周期如下表(以下事件中都没有通过编程主动关闭连接):

 

onIdleTimeout

返回值

onConnectionTimeout

返回值

何时关闭

true

true

client端负责

false

true

idleTimeout到时

true

false

connectionTimeout到时

false

false

idleTimeoutconnectionTimeout的最小值到达时

 

说明一下connectionTimeoutidleTimeout从何时开始计时:

connectionTimeout是从建立连接开始计时;

idleTimeout是从建立连接或最后一次触发onData事件时开始计时;

 

 

二、  Client端

 

1、如何创建一个同步socket连接?

   A、 可以通过直接new 一个BlockingConnection(String hostname, int port)

   B、 也可通过异步连接构建,如new BlockingConnection(INonBlockingConnection delegate)

 

 

2、当然XSocket也提供了连接池,同样包括同步连接池和异步连接池。

BlockingConnectionPool pool = new BlockingConnectionPool();这样就创建了一个同步连接池,既然是池,肯定会有池的大小了,pool.setMaxActivePerServer(poolSize);这是为池设置每个server池的大小,也可以设置池的总大小,如果不设置,默认为值为Integer.MAX_VALUE

 

如何从池中获取一个连接呢,如IBlockingConnection bc = pool.getBlockingConnection(host,port);有很多重载方法了。

当获取这个连接之后,我们可以通过设置如下参数进行调整优化:

 

设置连接超时时间

bc.setConnectionTimeoutMillis(connectTimeoutMillis);

设置连接最大空闲时间

bc.setIdleTimeoutMillis(this.idleTimeoutMillis);

是否自动刷新缓存

bc.setAutoflush(false);

这项时设置在真正要关闭连接时,client端是否要立即释放随机分配的端口,默认不会立即释放端口,需要等待1~4分钟,连接一直处于TIME_WAIT状态,如果这样设置,当关闭连接时,就会立即释放端口。

bc.setOption(IBlockingConnection.SO_LINGER , "0");

 

当然当连接使用完以后,需要调用bc.close();放回连接池中,如果close失败,那就要调用pool.destroy(bc)真正的关闭连接了。

 

仍需要解释下这里的connectTimeoutMillisidleTimeoutMillis了,

connectTimeoutMillis是池中获取连接开始算起的;

idleTimeoutMillis是在调用close方法后开始算起的;

 

client端连接的生命周期为connectTimeoutMillisidleTimeoutMillis的最小值 

 

转自:http://hpt321.iteye.com/blog/1013083

分享到:
评论

相关推荐

    xsocket源码和socket源码,文档

    Socket编程是计算机网络通信的核心技术之一,主要用于实现进程间的网络通信。在本资源包中,包含的是"XSocket"和标准"Socket"的源码以及相关的技术文档,这对于理解和掌握这两种网络通信机制非常有帮助。下面,我们...

    xsocket NIO框架示例

    xsocket NIO框架示例 resources 中有相关的 资料。telnet服务测试教程。和相关jar

    基于java的开发源码-NIO网络框架 xSocket.zip

    基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络...

    NIO网络框架 xSocket

    NIO网络框架 xSocket

    基于java的NIO网络框架 xSocket.zip

    xSocket是一款基于Java NIO实现的高性能网络通信框架,它为开发者提供了更简单、更高效的网络编程接口。 在Java NIO中,核心概念包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。通道是数据传输的途径...

    基于Java的NIO网络框架 xSocket.zip

    xSocket是一个基于Java NIO实现的网络通信框架,它的设计目标是提供高效、稳定、易用的网络编程接口。xSocket通过使用NIO的多路复用器(Selector)来监听多个套接字通道,当有数据可读或可写时,Selector会唤醒线程...

    java源码:NIO网络框架 xSocket.rar

    xSocket是一个基于Java NIO实现的网络通信框架,它旨在提供简单易用、性能卓越的网络编程接口,适用于开发高并发、低延迟的网络应用。 1. **Java NIO基础** Java NIO的核心组件包括通道(Channel)、缓冲区...

    轻量级网络通信框架nSocket.zip

    nSocket是基于java NIO.1和NIO.2开发的轻量级网络通信框架,该框架为用户提供异步非阻塞的网络编程接口。目前更新到0.1版本,实现了基本的连通性和简要的通信,在0.2版本中将增加filter chain的功能。nSocket与mina...

    基于XSocket、mdb、zq构建端到端高性能可视化量化分析交易系统

    "基于XSocket、mdb、zq构建端到端高性能可视化量化分析交易系统"这一项目,就是这样一个综合性解决方案,它涵盖了服务器端、客户端以及多种编程语言的支持。 1. **XSocket**: XSocket 是一个高性能的、跨平台的...

    NIO网络框架 xSocket.7z

    xSocket是一款基于Java NIO实现的高性能网络框架,它为开发者提供了一种简单、高效的网络编程接口。 在BIO模型中,每个连接都需要一个独立的线程进行处理,当并发连接数量增大时,服务器需要创建大量线程,这不仅会...

    基于Java的实例源码-NIO网络框架 xSocket.zip

    xSocket是一个基于Java NIO实现的网络通信框架,它提供了高性能、稳定可靠的网络连接管理。 1. **Java NIO基础**: - **通道(Channels)**:通道是数据传输的路径,可以连接到不同类型的I/O设备,如文件、套接字...

    XSocket.rar

    总的来说,XSocket.rar文件提供了关于Socket编程、TCP/IP协议实现、客户端和服务器端交互以及多播功能的实战示例,对于学习和开发网络通信应用的程序员来说,这是一个宝贵的资源。通过研究这个项目,开发者可以深入...

    基于XSocket、mdb、zq构建端到端高性能可视化量化分析交易系统全部资料+详细文档.zip

    基于XSocket、mdb、zq构建端到端高性能可视化量化分析交易系统全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,...

    基于Java的源码-NIO网络框架 xSocket.zip

    xSocket是一个基于Java NIO实现的高性能、轻量级的网络通信框架,它为开发人员提供了构建网络应用的强大工具。 首先,让我们深入理解Java NIO的核心组件: 1. **通道(Channels)**:通道是数据传输的路径,它可以...

    基于Java的实例开发源码-NIO网络框架 xSocket.zip

    xSocket是一个基于Java NIO实现的网络框架,它为开发者提供了简单、高效且可扩展的网络编程接口。xSocket的核心特性包括: 1. **非阻塞I/O**:xSocket利用Java NIO的Selector机制,能够同时监听并处理多个连接,...

    xsocket.jar包

    socket通讯框架xsocket所需的jar包

    tcp协议使用xsocket的demo

    XSocket则是一个专门用于简化Java中TCP通信的库,它使得开发者能够更方便地构建基于TCP的应用程序。 SpringBoot是一个轻量级的Java框架,它简化了创建独立的、生产级别的基于Spring的应用程序。SpringBoot集成了...

    Xsocket_V2_8_15.rar

    一个开源的基于TCP的Socket通信框架,基于java.nio开发的框架。 最好学的一个框架了。 内含开发包、源码和javadoc,javadoc用htmlParser(http://download.csdn.net/detail/liu149339750/4672852)从网站上抓下来的...

    SOCKET通讯(DLL)

    这样,你就可以直接调用XSOCKET提供的函数或类来创建和管理SOCKET对象,进行网络通信。 在"XSocket.h"头文件中,通常会定义XSOCKET类的成员函数,这些函数可能包括初始化SOCKET、建立连接、发送和接收数据、关闭...

Global site tag (gtag.js) - Google Analytics