在 Go 中使用 HTTP 与使用 TCP 套接字将文件下载/上传到服务器有啥优势? [关闭]

Posted

技术标签:

【中文标题】在 Go 中使用 HTTP 与使用 TCP 套接字将文件下载/上传到服务器有啥优势? [关闭]【英文标题】:What are the advantages of using HTTP in Go versus using TCP Sockets for downloading/uploading files to a server? [closed]在 Go 中使用 HTTP 与使用 TCP 套接字将文件下载/上传到服务器有什么优势? [关闭] 【发布时间】:2019-08-29 19:28:30 【问题描述】:

我正在为一个社交网络应用程序设置多个服务器,之前从未使用过 HTTP。使用 HTTP 而不是为 TCP 流创建自己的协议有什么好处吗?它将用于普通文本传输和图像/视频。

我已经启动了一个通用 TCP 服务器,它可以传输小型有组织的文本数据包和更大的图像/视频流,但我不确定它是否会像使用 HTTP/s 一样具有可扩展性/高效/安全性。我不打算发布代码,因为我希望这个问题足够笼统,不需要它,而且我还没有寻找代码分析。

服务器正在传输数据,但我不确定使用 HTTP 的优点/缺点。其他使用 Go 作为系统的网站是使用 HTTP 还是直接使用套接字?

【问题讨论】:

【参考方案1】:

从理论上讲,原始 TCP 套接字比 HTTP 性能更高(忽略几个外部因素)。

HTTP 库功能强大且经过良好测试,并且在面对新的错误和安全威胁时会不断更新。

那么您是针对原始性能还是针对开发人员时间进行优化?

问自己几个问题:

    对于我的应用程序来说,HTTP 是否太慢? (相关问题:我测量过吗?) 我是否有时间和精力在我的程序生命周期内响应连接库中的错误和漏洞? 如果我大获成功,我能否找到、雇用、培训和留住合格的劳动力?

如果这只是为了你的学习,那就去做吧。

【讨论】:

暗示在您的答案中,但值得特别指出 - HTTP 服务器和客户端库通常还提供开箱即用的经过审查的 HTTPS 实现,而在原始 TCP 套接字上编写自己的安全层是一个很高的要求-风险活动。

以上是关于在 Go 中使用 HTTP 与使用 TCP 套接字将文件下载/上传到服务器有啥优势? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

tcp服务器中的IdleTimeout

Go_socket编程

如何在 C++/QT 中使用 TCP 服务器套接字创建 Http 服务器

Go_socket编程

GO HTTP1.1 与 HTTP2.0 的使用和简单分析

Go 语言网络编程系列— Socket 编程入门:Dial 函数及其使用