Web服务 vs TCP/IP套接字(Java)+ SQL连接

8
我们目前处于产品生命周期的阶段,正在考虑转移到Web服务。我们的系统是用Java编写的,包括许多客户端和服务器应用程序,它们通过TCP套接字相互通信,并且具有内联SQL以执行数据检索和更新(我知道很糟糕),使用我们自己的SQL Connection类,该类然后使用java.sql.Connection连接到使用Microsoft JDBC驱动程序连接到SQL Server数据库。
这些应用程序使用TCP套接字进行绑定。它们从彼此请求数据并将数据推送到彼此。这完全没有问题。
思路:
因此,我们正在考虑将所有数据访问和TCP通信转换为Web服务。
Web服务将被设计为在公司安全的Internet站点上运行。想法是用户可以在家中或工作时将其客户端连接到Web服务。
客户端应用程序将使用Web服务将消息发送/接收到/从服务器端应用程序。客户端应用程序将使用Web服务检索和更新数据库中的数据。
问题:
我只想知道人们在进行双向通信(请求和推送)时使用Web服务的经验如何(如果可能),以及对此的看法。
将数据访问转换为Web服务似乎很简单-我可以预见到在某些系统部分检索大型数据集时会出现性能问题。
我正在查阅各种相关材料,因为我已经有一段时间没有接触Web服务了(使用C#和ASP.NET)。目前正在阅读“使用Java™构建Web服务:理解XML,SOAP,WSDL和UDDI”。我必须承认,我以为Web服务总是无状态的,但刚刚读到它们并不是!
谢谢,
Andez

我的帖子被删除了,所以我在这里留言回答你的问题:是的。 - Fahad Abdullah
你能通过fahad.ryk@hotmail.com与我联系吗? - Fahad Abdullah
1个回答

6
它有助于将Web服务视为在传输层上与任何其他Web应用程序相同。它以相同的方式使用HTTP / HTTPS协议,只是它不发送HTML,而是根据预定义格式(SOAP)发送XML。因此:
- 它是请求/响应导向的 - 可以像Web页面一样使用会话(假设您有支持在请求之间维护会话cookie的Web服务客户端)以相同的方式具有状态性。 - 所有请求最终都归结为服务器中的老式servlet端点
牢记这些限制和特点,考虑您的要求及其如何相互映射。如果需要真正的双向通信(推送),则Web服务并不理想。它们是客户端/服务器,请求/响应导向的。要实现推送,您必须从客户端轮询。一个可能的替代方案是让“服务器”和“客户端”都充当Web服务“服务器”。这意味着在客户端中捆绑一些轻量级servlet引擎(如jetty),以便“服务器”可以对“客户端”进行Web服务调用。另一种方法是查看双向RMI / IOOP。
另一种方法是保持您今天拥有的通信层。仅出于使用Web服务的目的而重构没有固有好处。如果它们不提供任何好处,那就是浪费。正如您自己提到的,Web服务带来了大量额外的开销(冗长的协议,servlet引擎等),因此它确实需要将额外的成本和开发时间与明显的好处平衡。俗话说“如果没有坏,就不要修理它”。由于您说当前解决方案“完全正常工作”,我可能不会更改它。这只是我的看法。

我们将研究RMI/IIOP。替换套接字的关键是当用户不在网络上时,他们将无法访问机器或IP地址,所以我越想越觉得我们肯定需要一些替代方案。 - Andez
是的,这绝对是一个有效的理由。将HTTP服务器暴露到外部要少麻烦得多,而且您可以获得SSL而无需自己在传输层之上构建加密层。不过,您需要重新考虑应用程序中的“推送”部分。HTTP绝对不是为此目的而设计的。 - pap
我在研究过程中偶然发现了Comet。看起来很有趣,在http://www.cometd.org/上还有一些很好的例子。这允许服务器将事件推送回客户端。此外,sourceforge上还有一个名为WS JDBC驱动程序的项目 - http://ws-jdbc.sourceforge.net - 看起来已经不再维护了。 - Andez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接