我有一个服务,foo,在机器A上运行。我需要从机器B访问该服务。一种方法是在A上启动一个web服务器并通过HTTP执行;在A上的web服务器下运行的代码访问foo并返回结果。另一种是在A上编写socket服务器;socket服务器访问服务foo并返回结果。
HTTP连接初始化和握手的开销很大;可以写套接字,但我想避免这种情况。对于高性能远程调用,还有哪些其他选项可用?
发布于 2015-07-16 20:56:58
HTTP只是套接字上的协议。如果您使用的是TCP/IP网络,则将使用套接字。HTTP连接初始化和握手并不是最昂贵的部分,真正昂贵的部分是TCP初始化。
如果使用HTTP1.1,则可以使用持久连接(Keep-Alive),这将极大地降低此成本,更接近于保持持久套接字打开。
这完全取决于您是否想要/需要更高级别的协议。使用HTTP意味着您将能够从更多的客户端使用此服务,而编写的文档要少得多(如果您编写自己的协议,则必须对其进行文档记录)。HTTP服务器还支持开箱即用的身份验证、cookie、日志记录等功能。如果您不需要这些功能,那么HTTP可能是一种浪费。但我看到的项目中,很少有项目至少不需要这些东西。
发布于 2015-07-19 15:26:04
补充@Rob的答案,因为问题并不是精确地指向应用程序或性能边界,因此在更广泛的上下文中研究可用选项将是很好的,即Inter process communication。
维基百科页面清楚地列出了可用的选项,这将是一个很好的起点。
发布于 2015-07-20 16:10:07
您将使用什么技术?让我来回答Java世界的问题。
如果你的请求速率低于100次/秒,你不应该关心优化,而应该使用最通用的解决方案- HTTP。
像Netty-HTTP这样编写良好的异步服务器可以在中等级别的硬件上轻松地处理每秒1000个请求。
如果你需要更多或者资源有限,你可以使用二进制格式。最受欢迎的是Google Protobuf(多语言)+ Netty (Java)。
关于HTTP性能,您应该知道的是:
https://stackoverflow.com/questions/31453516
复制相似问题