网络相关配置

网络相关参数主要在连接管理器(Connection Manager)中配置。通常在amoeba.xml文件中:

Example 5.3. 配置amoeba.xml的网络相关选项

<?xml version="1.0" encoding="gbk"?>

<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
 ...
 <proxy>
  ...
  <service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">
   ...
   <property name="connectionFactory">
    <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
     <property name="sendBufferSize">128</property>1
     <property name="receiveBufferSize">64</property>2
     <property name="tcpNoDelay">true</property>3
    </bean>
   </property>
   ...
  </service>
  ...
 </proxy>
 ...
</amoeba:configuration>

1

sendBufferSize – 属性设置在SocketChannel.Write 方法的调用中期望发送的字节数。实际上, 此属性的操作对象是为发送操作所分配的网络缓冲区空间。网络缓冲区应至少与应用程序缓冲 区同样大小,这样才能确保在一次操作中就能存储和发送所需的数据。使用 SendBufferSize 属 性设置此大小。如果应用程序要发送批量数据,需为 Write 方法提供足够大的应用程序缓冲区。 如果网络缓冲区小于提供给 Write 方法的数据量,则对 Write 方法的每次调用都将多次执行网 络发送操作。通过确保网络缓冲区至少与应用程序缓冲区同样大小,可获得更大的数据吞吐量。

2

receiveBufferSize–设置你希望在接收缓冲区中为每次读操作存储的字节数。实际上,此属性的操作对象是为 接收传入数据所分配的网络缓冲区空间。网络缓冲区应至少与应用程序缓冲区同样大小,这样才能确保在调用SocketChannel.Read 方法时所需的数据是可用的。使用 ReceiveBufferSize 属性 设置此大小。如果应用程序将要接收批量数据,应为Read方法提供非常大的应用程序缓冲区。 如果网络缓冲区小于在 Read 方法中所请求的数据量,你将无法在一次读取操作中检索到所需的 数据量。这将导致增加对 Read 方法的调用次数,进而增加系统开销。

3

tcpNoDelay–如果禁用延迟,则为 true;否则为 false。默认值为 true。 如果该参数设为 false,则直到 TcpClient 收集到相当数量的输出数据之后,它才会通过网络发 送数据包。由于 TCP 段中系统开销的数量,发送少量数据时效率比较低。但是,也存在这样情 况:你可能要发送极少量的数据或者期望立即从你发送的每个数据包得到响应。你应该在网络效率与应用程序响应要求中取舍。