我有一台服务,foo,在机器A上运行。我需要从机器B访问该服务。一种方法是在A上启动Web服务器并通过HTTP执行;在A上的Web服务器下运行的代码访问foo并返回结果。另一种是在A上编写套接字服务器;套接字服务器访问服务foo并返回结果。
HTTP连接启动和握手很昂贵;套接字可以写,但我想避免这种情况。还有哪些其他选项可用于高性能远程呼叫?
答案 0 :(得分:0)
HTTP只是套接字上的协议。如果您使用的是TCP / IP网络,那么您将使用套接字。 HTTP连接启动和握手不是昂贵的比特,它的TCP启动确实是昂贵的比特。
如果使用HTTP 1.1,则可以使用持久连接(Keep-Alive),这可以大大降低此成本,更接近于保持持久套接字打开。
这完全取决于您是否需要/需要更高级别的协议。使用HTTP意味着您可以执行诸如从更多客户端使用此服务的操作,同时编写更少的文档(如果您编写自己的协议,则必须记录它)。 HTTP服务器还支持身份验证,cookie,日志记录等开箱即用的功能。如果您不需要这些功能,那么HTTP可能是一种浪费。但我发现很少有项目至少不需要其中一些东西。
答案 1 :(得分:0)
添加@Rob的答案,因为问题并没有准确地指向应用程序或性能边界,所以最好在更广泛的上下文中查看可用的选项,Inter process communication。
维基百科页面干净地列出了可用的选项,并且是一个很好的起点。
答案 2 :(得分:0)
您打算使用哪种技术?让我回答Java世界。
如果您的请求率低于100 /秒,您不应该关心优化并使用最通用的解决方案 - HTTP。
编写良好的异步服务器(如Netty-HTTP)可以在中级硬件上轻松处理每秒1000个请求。
如果您需要更多资源或拥有受限资源,可以使用二进制格式。最受欢迎的是Google Protobuf(多语言)+ Netty(Java)。
您应了解的有关HTTP性能的信息: