影响Socket数据接收发送的选项设置
 
   Java Socket运行在JVM或者底层OS提供的native socket之上,所有对Java Socket的操作都反映到native socket。所以从Socket发展渊源看,影响Socket性能的选项也必然是native socke暴露给Javat的一些设置。
| # | 选项 | Java版本 | Default | 说明 | 
| 1 | TCP_NODELAY | 1.1+ | false | 设置是否尽快发送packer,而不管其大小 | 
| 2 | SO_TIMEOUT | 1.1+ | 0 | 数据读取超时,0表示永不超时 | 
| 3 | SO_LINGER | 1.1+ | false | 设置socket关闭后,没有发送的数据包逗留时间 | 
| 4 | SO_RCVBUF | 1.2+ |  | 接收Buffer | 
| 5 | SO_SNDBUF | 1.2+ |  | 发送Buffer | 
| 6 | SO_KEEPALIVE | 1.3+ | false | 连接存活探测 | 
| 7 | OOBINLINE | 1.4+ | false | 紧急数据处理设置 | 
| 8 | SO_REUSEADDR | 1.4+ | false | 地址重用设置 | 
1)TCP_NODELAY
2)SO_TIMEOUT
3)SO_LINGER
4)SO_RCVBUF
5)SO_SNDBUF
设置发送Bufffer,对socket传输数据影响和SO_RCVBUF类似
6)SO_KEEPALIVE
/proc/sys/net/ipv4/tcp_keepalive_time        每次确认包发送的间隔时间     
/proc/sys/net/ipv4/tcp_keepalive_intvl        每次确认最多重发次数     
/proc/sys/net/ipv4/tcp_keepalive_probes    重试间隔
7)OOBINLINE
8)SO_REUSEADDR
服务设置
针对一些不同的Internet服务设置不同的服务级别是一种有效的Internet资源利用和服务体现。例如视频/音频服务需要高带宽、低延时,但允许少量丢包,而email等对贷款和延时不太关注,主要在合理的时间传输到就无伤大雅。这和分布式CAP理论一样,满足所有美好特性的服务很难达成,一是资源部允许,而是没有必要。
TCP定义了四种服务类型,但这些不一定在所有路由器等网络设备和本地TCP栈支持,这些设置仅是给底层实现一个提示
1)低成本,0x02
2)高可靠性,0x04
3)最大吞吐量,0x08
4)最小延时,0x10
这四种服务可以组合设置,通过位或运算设置:
public void setTrafficClass(int trafficClass) throws SocketException
比如我们设置视频服务的设置s.setTrafficClass(0x08 | 0x10);
在Java5之后增加了一个不同方法设置这些服务偏好:
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
这个方法用数值表达在连接时间、延时、贷款一个偏好。如setPerformancePreferences(1,101,2),表示最看重latency,其次bandwidth,最不关注的是connectionTime。
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐