首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于远程服务访问的高性能选项

用于远程服务访问的高性能选项
EN

Stack Overflow用户
提问于 2015-07-16 19:58:03
回答 3查看 37关注 0票数 0

我有一个服务,foo,在机器A上运行。我需要从机器B访问该服务。一种方法是在A上启动一个web服务器并通过HTTP执行;在A上的web服务器下运行的代码访问foo并返回结果。另一种是在A上编写socket服务器;socket服务器访问服务foo并返回结果。

HTTP连接初始化和握手的开销很大;可以写套接字,但我想避免这种情况。对于高性能远程调用,还有哪些其他选项可用?

EN

回答 3

Stack Overflow用户

发布于 2015-07-16 20:56:58

HTTP只是套接字上的协议。如果您使用的是TCP/IP网络,则将使用套接字。HTTP连接初始化和握手并不是最昂贵的部分,真正昂贵的部分是TCP初始化。

如果使用HTTP1.1,则可以使用持久连接(Keep-Alive),这将极大地降低此成本,更接近于保持持久套接字打开。

这完全取决于您是否想要/需要更高级别的协议。使用HTTP意味着您将能够从更多的客户端使用此服务,而编写的文档要少得多(如果您编写自己的协议,则必须对其进行文档记录)。HTTP服务器还支持开箱即用的身份验证、cookie、日志记录等功能。如果您不需要这些功能,那么HTTP可能是一种浪费。但我看到的项目中,很少有项目至少不需要这些东西。

票数 0
EN

Stack Overflow用户

发布于 2015-07-19 15:26:04

补充@Rob的答案,因为问题并不是精确地指向应用程序或性能边界,因此在更广泛的上下文中研究可用选项将是很好的,即Inter process communication

维基百科页面清楚地列出了可用的选项,这将是一个很好的起点。

票数 0
EN

Stack Overflow用户

发布于 2015-07-20 16:10:07

您将使用什么技术?让我来回答Java世界的问题。

如果你的请求速率低于100次/秒,你不应该关心优化,而应该使用最通用的解决方案- HTTP。

像Netty-HTTP这样编写良好的异步服务器可以在中等级别的硬件上轻松地处理每秒1000个请求。

如果你需要更多或者资源有限,你可以使用二进制格式。最受欢迎的是Google Protobuf(多语言)+ Netty (Java)。

关于HTTP性能,您应该知道的是:

  • Http可以使用Keep-Alive,它可以消除每个请求的重新连接成本。
  • HTTP会增加每个请求和响应的流量开销-大约50-100个字节。
  • HTTP客户端和服务器会消耗额外的CPU来解析HTTP头-这一点在上面提到的100 req/sec之后很明显
  • 在选择技术时要小心。即使在21世纪,也很难找到编写良好的超文本传输协议服务器和客户端。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31453516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档