- 浏览: 2600455 次
- 来自: 杭州
文章分类
- 全部博客 (1190)
- webwork (4)
- 网摘 (18)
- java (104)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (15)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (8)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
Aqu415:
,默认是netty还是hassion?
dubbo入门 -
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介
Socket 的 I/O 调用可能会因为多种原因而阻塞。数据输入方法 read()和 receive()在没有数据可读时会阻塞。TCP 套接字的 write()方法在没有足够的空间缓存传输的数据时可能阻塞。 ServerSocket 的 accept()方法和 Socket 的构造函数都会阻塞等待,直到连接建立(见第6.4 节)。同时,长的信息往返时间,高错误率的连接和慢速的(或已发生故障的)服务器,都可能导致需要很长的时间来建立连接。所有这些情况,只有在连接请求得到满足后这些方法才会返回。
当然,调用一个已经阻塞的方法将使应用程序停止(并使运行它的线程无效)。当程序在等待一次调用的完成时如果还有其他任务要执行的情况会怎样(如,更新"忙碌"状态的光标或响应用户请求)?这些程序可能没有时间来等待一个阻塞的方法调用。那UDP 数据报文丢失的情况呢?如果我们阻塞等待接收一个数据报文,而它已经丢失,则会导致程序无限期地阻塞下去。
accept(),read()和 receive()
对于这些方法,我们可以使用 Socket 类、ServerSocket 类和 DatagramSocket 类的setSoTimeout()方法,设置其阻塞的最长时间(以毫秒为单位)。如果在指定时间内这些方
法没有返回,则将抛出一个 InterruptedIOException 异常。对于 Socket 实例,在调用 read()方法前,我们还可以使用该套接字的 InputStream 的 available()方法来检测是否有可读的数据。
写数据
write()方法调用也会阻塞等待,直到最后一个字节成功写入到了 TCP 实现的本地缓存中。如果可用的缓存空间比要写入的数据小,在 write()方法调用返回前,必须把一些数据成功传输到连接的另一端(详情见第 6.1 节)。因此,write()方法的阻塞总时间最终还是取决于接收端的应用程序。不幸的是 Java 现在还没有提供任何使 write()超时或由其他线程将其打断的方法。所以如果一个可以在 Socket 实例上发送大量数据的协议可能会无限期地阻塞下去。(第 6.2 节介绍了这个特点可能导致的灾难性后果)
控制默认行为
TCP/IP 协议的开发者用了大量的时间来考虑协议的默认行为,以满足大部分应用程序的需要。(如果你对此表示怀疑,可以参考 RFC1122 和 1123,它们根据多年的经验对 TCP/IP协议的实现的推荐行为进行了详尽的描述。)
Keep-Alive
如果一段时间内没有数据交换,通信的每个终端可能都会怀疑对方是否还处于活跃状态。TCP 协议提供了一种 keep-alive 的机制,该机制在经过一段不活动时间后,将向另一个
终端发送一个探测消息。如果另一个终端还出于活跃状态,它将回复一个确认消息。如果经过几次尝试后依然没有收到另一终端的确认消息,则终止发送探测信息,关闭套接字,并在
下一次尝试 I/O 操作时抛出一个异常。注意,应用程序只要在探测信息失败时才能察觉到keep-alive 机制的工作。
默认情况下,keep-alive 机制是关闭的。通过调用 setKeepAlive()方法将其设置为 true 来开启 keep-alive 机制。
发送和接收缓存区的大小
一旦创建了一个 Socket 或 DatagramSocket 实例,操作系统就必须为其分配缓存区以存放接收的和要发送的数据。Socket, DatagramSocket: 设置和获取发送接收缓存区大小:
int getReceiveBufferSize()
void setReceiveBufferSize(int size)
int getSendBufferSize()
void setSendBufferSize(int size)
getReceiveBufferSize(),setReceiveBufferSize(),getSendBufferSize(), 和setSendBufferSize()方法分别用于获取和设置接收发送缓冲区的大小(以字节为单位)。需要注意的是,这里指定的大小只是作为一种建议给出的,实际大小可能与之存在差异。
还可以在 ServerSocket 上指定接收缓冲区大小。不过,这实际上是为 accept()方法所创建的新 Socket 实例设置接收缓冲区大小。为什么可以只设置接收缓冲区大小而不设置发送缓冲区的大小呢?当接收了一个新的 Socket,它就可以立刻开始接收数据,因此需要在accept()方法完成连接之前设置好缓冲区的大小。另一方面,由于可以控制什么时候在新接受的套接字上发送数据,因此在发送之前还有时间设置发送缓冲区的大小。
ServerSocket: 设置/获取所接受套接字的接收缓冲区大小:
int getReceiveBufferSize()
void setReceiveBufferSize(int size)
getReceiveBufferSize()和 setReceiveBufferSize()方法用于获取和设置由 accept()方法创建的 Socket 实例的接收缓冲区的大小(字节)。
超时
如前面所介绍的,很多 I/O 操作如果不能立即完成就会阻塞等待:读操作将阻塞等待直到至少有一个字节可读;接收操作将阻塞等待直到成功建立连接。不幸的是阻塞的时间没有
限制。可以为各种操作指定一个最大阻塞时间。
地址重用
对于 TCP,当一个连接关闭后,通信的一端(或两端)必须在"Time-Wait"状态上等待一段时间,以对传输途中丢失的数据包进行清理(见第 6.4.2 节)。不幸的是,通信终端可能无法等到 Time-Wait 结束。对于这两种情况,都需要能够与正在使用的地址进行绑定的能力,这就要求实现地址重用。
Socket, ServerSocket, DatagramSocket: 设置/获取地址重用
boolean getReuseAddress()
void setReuseAddress(boolean on)
消除缓冲延迟
TCP 协议将数据缓存起来直到足够多时一次发送,以避免发送过小的数据包而浪费网络资源。虽然这个功能有利于网络,但应用程序可能对所造成的缓冲延迟不能容忍。好在可
以人为禁用缓存功能。
Socket: 设置/获取 TCP 缓冲延迟
boolean getTcpNoDelay()
void setTcpNoDelay(boolean on)
getTcpNoDelay()和 setTcpNoDelay()方法用于获取和设置是否消除缓冲延迟。将值设置为 true 表示禁用缓冲延迟功能。
紧急数据
假设你已经向一个慢速接收者发送了很多数据,突然又有了它急需的其它数据。如果将这些数据发送到输出流,它们将追加在常规数据队列的后面,无法保证接收者能够立即接收。为了解决这个问题,TCP 协议中包含了紧急(urgent)数据的概念,这类数据可以(理论上来说)跳到前面去。由于它们能够绕过常规数据流,这些数据称为频道外数据。
Socket: 紧急数据
void sendUrgentData(int data)
boolean getOOBInline()
void setOOBInline(boolean on)
要发送紧急数据需要调用 sendUrgentData() 方法,它将发送其 int 参数的最低位字节。要接收这个字节,必须为 setOOBInline()方法传递 true 参数启用接收者对频道外数据的接收。该字节在接收者的输入流中被接收。发送于紧急字节之前的数据将处于接收者的输入流中的紧急字节前面。如果没有启用接收者接收频道外数据的功能,紧急字节将被无声地丢弃。
注意 Java 中的紧急数据几乎没什么用,因为紧急字节与常规字节按照传输的顺序混在了一起。实际上,Java 接收者并不能区分其是否在接收紧急数据。
关闭后停留
当调用套接字的 close()方法后,即使套接字的缓冲区中还有没有发送的数据,它也将立即返回。这样不发送完所有数据可能导致的问题是主机将在后面的某个时刻发生故障。
其实可以选择让 close()方法"停留"或阻塞一段时间,直到所有数据都已经发送并确认,或发生了超时。详情见第 6.4.2 节
Socket: 在 close()方法停留
int getSoLinger()
void setSoLinger(boole
如果调用 setSoLinger()并将其设置为 true,那么后面再调用的 close()方法将阻塞等待,直到远程终端对所有数据都返回了确认信息,或者发生了指定的超时(秒)。如果发生了超
时,TCP 连接将强行关闭。如果开启了停留功能,getSoLinger()方法将返回指定的超时时间,否则返回-1。
int getSoLinger()
void setSoLinger(boolean on, int linger)
发表评论
-
TCP滑动窗口
2014-06-04 16:10 810目前建立在TCP协议上的网络协议特别多,有telnet,ss ... -
TCP 滑动窗口协议
2013-11-07 18:36 5459TCP滑动窗口机制 我们可以大概看一下上图的模型 ... -
关于JAVA取本机ip的一些总结
2013-09-13 14:29 8187通常绑定本机ip地址 一般如下 I ... -
网络编程中Nagle算法和Delayed ACK的测试
2013-07-28 22:44 911网络编程中Nagle算法和Delayed ACK的测试 -
NFS-RPC框架优化过程(从37k到168k)
2013-07-18 22:17 1480NFS-RPC框架从编写之初,到现在为止(应该还会有些提升, ... -
Java程序员也应该知道的一些网络知识
2013-07-18 22:11 875对于需要编写网络通 ... -
深入理解JDBC的超时(timeout)设置
2013-06-26 15:27 6100真实案例:应用服务器在遭到DDos攻击后无法响应 在遭到 ... -
socket InputStream available()lock的问题
2013-03-28 18:45 3119在socket InputStream读取数据的问题记录一 ... -
socket参数对性能的影响
2013-03-26 14:51 1030今天发现线上一台机器的cilent端很慢,通过打点记录相关 ... -
socket InputStream读取数据的问题记录
2013-03-13 17:42 2305在用java写socket client的发现一个问题,如 ... -
java socket参数详解:TcpNoDelay
2012-12-14 19:28 1520TcpNoDelay=false,为启用nagle算法,也是默 ... -
python高性能网络框架Twisted介绍
2012-11-12 21:48 0什麼是Twisted Twisted是一 ... -
Reactor模式,或者叫反应器模式
2012-11-12 20:58 0原文:http://daimojingde ... -
libevent源码分析
2012-11-12 20:52 926原文参考: http://blog.csdn.net/spar ... -
一个自定义协议的例子
2012-11-10 14:54 2965public class VoteMsg { pr ... -
Socket send函数和recv函数详解
2012-11-09 12:17 1016int send( SOCKET s, c ... -
python struct
2012-11-07 14:03 759在使用python向java发送数据的时候一般是需要记录数据长 ... -
Frame实现
2012-11-06 21:01 826这里讨论Frame的实现问题。 -
Java Socket codec
2012-11-06 20:08 1111要写好java的网络编程并 ... -
Java网络编程--Socket编程
2012-11-03 23:07 989原文:http://blog.sina.com.c ...
相关推荐
Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] ...
Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] ...
Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] ...
Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] ...
Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] ...
Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] ...
源代码的说明中有几个注意事项: 一、测试小程序wx.request接口 二、测试小程序wx.uploadFile接口,单张上传 三、测试小程序websocket相关接口 另外还有以下部分代码需要注意: //发起websocket连接 wx...
185 9.3.2 Applet参数的读取 186 9.3.3 Applet与URL 187 9.4 在Applet中的多媒体处理 188 9.4.1 在Applet中显示图像 188 9.4.2 在Applet中播放声音 189 9.5 Applet的事件处理 189 习题 191 第10章 ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
第 一 章 Java概 述 § 1.1 Java语 言 出 现 的 背景 、 影 响 及 应 用 前 景 一 、 背 景 最 近 一 年 多 来 ,在 Internet上 出 现 的 特 别 吸 引 人 的 事 件 就是 Ja va语 言 和 用 Java编 写 的 浏 览 器...
.1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler) 17 1.5.3 Java类库(Java Class Libraries) 17 1.5.4 Java虚拟机(Java Virtual Machine) 17 1.5.5 HelloWorld的整个流程 17 ...
像其他的Java应用程序一样,Aglet平台需要通过Java policy文件(通常是.java.policy)来打开Socket、执行Agent、获取本地文件等。这项工作可以通过ant来完成,我们可以在bin目录下输入如下指令: ant install-home...
.1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler) 17 1.5.3 Java类库(Java Class Libraries) 17 1.5.4 Java虚拟机(Java Virtual Machine) 17 1.5.5 HelloWorld的整个流程 17 ...
四、 课程设计报告内容: 1) 目录 2) 设计题目及具体要求 3) 总体设计思路(简要说明系统包含的java源程序及其功能,描述类之间的主要关系) 4) 具体设计(以表格形式描述各个类含有的成员变量和...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,Unicode 61.描述反射机制的作用 62.如何读写一个文件? 63.在图形界面中,一个按钮如何处理鼠标点击事件? 64.在图形界面中,一个...
该工具为个人整理修改的常用工具类,maven结构,Java语言编写详细依赖间pom... SocketUtil:socket测试工具 TotpAuthUtil:动态密码工具 包括生成和校验 VerifyCodeUtil:图片验证码生成工具 ZipUtils:gzip压缩工具
部分说明文档内容: 协议层问题(协议设计) 登录功能 登录--指的是一个玩家在Socket连接上服务器后,还没开始游戏的一种状态,在这种状态下,客户端不应该接受任何关于游戏逻辑的消息。 完成登录功能需要设计...
1. 前言 1-4 1.1. JAVA特点 1-4 1.2. 运行原理 1-4 1.3. JAVA目录 1-4 2. 一•基础知识 2-4 ...17.8. 可变长的参数 17-73 17.9. JAVA5.0 的注释 (Annotation) 17-73 17.10. Callable 和 Future接口 17-74