【问题标题】:Trouble understanding persistent http connections in c#无法理解 C# 中的持久 http 连接
【发布时间】:2011-04-19 12:58:26
【问题描述】:

我不太明白持久连接究竟是如何工作的。

所以 keepalive 属性是默认设置的,据我所知,这应该让我的连接保持打开状态。

所以现在我正在通过 HTTPWebRequest 上的 POST 发送我的数据。 但我每次向收件人发送东西时都会这样做。

所以它是这样的: 将数据从客户端发送到服务器,返回对帖子的响应。

但接下来我只是发送另一个 POST,而不是使用我已经打开的连接。所以我觉得我发送的比实际需要的多。 我不能只打开一次连接,然后通过这个连接继续通信吗?

我很抱歉我对这个主题理解不佳,但这是我第一次真正使用网络协议。

提前致谢

丹尼尔

【问题讨论】:

    标签: c# web-services http client-server


    【解决方案1】:

    KeepAlive 已添加到 HTTP 协议以提高服务器端性能。

    HTTP 通常是一种无状态协议。所有状态都保存为 cookie 或服务器会话。如果 KeepAlive 设置为 true,则客户端和服务器可能会保持其底层 TCP 连接处于活动状态。

    通常为KeepAlive 设置超时,这样如果客户端没有发出任何其他请求,此连接将关闭。

    此功能通常在不同平台上以不同的方式实现,例如,我看到 Java 实现的问题,它们不遵守超时并且服务器关闭连接,因此客户端尝试再次连接失败,因为它假定连接仍然打开。

    请参阅 RFC 文档 here

    【讨论】:

      【解决方案2】:

      如果服务器支持,您可以重复使用该连接....包括您和服务器之间的任何代理。这就是它有时会掉下来的地方。它被附加到 HTTP 1.0 并在 1.1 中正式添加。

      基本上,您的客户端会用一个特殊的标头询问“我可以让这个连接保持活动状态”,然后如果服务器支持它,它会回复说“是”,然后客户端可以在同一个套接字上发送更多请求。

      您的客户端代码也必须支持此功能。 .Net 应该没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 2012-06-19
        • 2011-09-13
        • 1970-01-01
        • 2017-05-28
        相关资源
        最近更新 更多