影响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推荐