我们在使用 socket 编程中的 tcp 通信和 http 请求,都会设置 connect timeout, 这个连接时间就是三次握手么?

2016-07-02 10:35:38 +08:00
 aiqier

如题,这个 connect ,就是三次握手么,这个超时时间就是指三次握手的时间么?

3973 次点击
所在节点    HTTP
4 条回复
bengol
2016-07-02 11:04:07 +08:00
客户端前 2 次握手的时间
2225377fjs
2016-07-02 11:13:46 +08:00
一般情况下 socket 层级设置 connect timeout 的确是在 connect 操作的超时(建立 tcp 连接,握手步骤),在异步或者同步的 connect 操作都有用。
但是对于 http 层级来说,好像没有 connect timeout 这种说法,更多的是设置类似于 socket_timeout 类似的参数,这个是在一个 tcp 连接建立之后,长时间都没有 http 交互的话,服务器将会主动将这个 tcp 连接关闭。
aiqier
2016-07-02 12:16:30 +08:00
@2225377fjs 但是无论是什么语言,在使用 http 库进行 http 请求时,都可以设置两个参数,一个是 connect timeout 一个是 readtimout
```
class HTTPRequest(object):
"""HTTP client request object."""

# Default values for HTTPRequest parameters.
# Merged with the values on the request object by AsyncHTTPClient
# implementations.
_DEFAULTS = dict(
connect_timeout=20.0,
request_timeout=20.0,
follow_redirects=True,
max_redirects=5,
decompress_response=True,
proxy_password='',
allow_nonstandard_methods=False,
validate_cert=True)

def __init__(self, url, method="GET", headers=None, body=None,
auth_username=None, auth_password=None, auth_mode=None,
connect_timeout=None, request_timeout=None,
if_modified_since=None, follow_redirects=None,
max_redirects=None, user_agent=None, use_gzip=None,
network_interface=None, streaming_callback=None,
header_callback=None, prepare_curl_callback=None,
proxy_host=None, proxy_port=None, proxy_username=None,
proxy_password=None, allow_nonstandard_methods=None,
validate_cert=None, ca_certs=None,
allow_ipv6=None,
client_key=None, client_cert=None, body_producer=None,
expect_100_continue=False, decompress_response=None,
ssl_options=None):
```
aiqier
2016-07-02 12:19:27 +08:00
@2225377fjs 这是一个 python 的客户端,你看它有:

connect_timeout=20.0,
request_timeout=20.0,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/289763

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX