Sockets 插座可靠吗?
使用套接字在两台服务器之间发送数据是一个好主意,还是应该使用MQ之类的工具来移动数据 我的问题:如果我只需要一次/有保证地交付数据,那么套接字是否可靠 还有其他解决办法吗Sockets 插座可靠吗?,sockets,communication,reliability,qos,Sockets,Communication,Reliability,Qos,使用套接字在两台服务器之间发送数据是一个好主意,还是应该使用MQ之类的工具来移动数据 我的问题:如果我只需要一次/有保证地交付数据,那么套接字是否可靠 还有其他解决办法吗 谢谢。套接字与您的实现一样可靠,并且基于底层硬件。如果您不想麻烦地提供有保证的交付服务(在什么条件下?100%永远不会发生),那么消息队列系统是一个不错的选择。消息队列将实现所有持久性、排队、重试等,如果使用标准套接字,则需要自己实现这些功能 如果无论发生什么情况都需要有保证的交付(例如,如果另一方脱机进行维护),并且您不想自
谢谢。套接字与您的实现一样可靠,并且基于底层硬件。如果您不想麻烦地提供有保证的交付服务(在什么条件下?100%永远不会发生),那么消息队列系统是一个不错的选择。消息队列将实现所有持久性、排队、重试等,如果使用标准套接字,则需要自己实现这些功能 如果无论发生什么情况都需要有保证的交付(例如,如果另一方脱机进行维护),并且您不想自己编写所有逻辑,那么您可能应该使用MQ。套接字是用于连接到另一方的设备,无论该方是MQ还是消息的最终接收者。套接字是传输数据的原始机制。其他的一切都是在这个基础上实现的。在第四层,它们属于第四层。尽管它们实现了可靠的端到端连接,但很少用作端协议。您几乎总是需要实现应用程序层。这将取决于您的应用程序(您需要传输文件还是只发送消息)和您的网络基础设施。如果您使用,TCP协议可确保数据在传输过程中不会丢失,也不会损坏(尽管你必须决定它的16位校验和是否足够,或者你需要一个应用层校验和机制)
MQ系统提供的以及您可能需要或不需要的是应用程序级可靠性,即即使在遇到间歇性硬件或软件故障时也能保证交付的能力。根据数据类型,简单的web服务可能是最快的解决方案。它们相对容易设置和测试。尽管对于某些spe来说cific示例我需要知道您正在运行的是哪种数据和环境。这在很大程度上取决于您正在开发的应用程序的类型。如果您正在编写一个程序,需要对发送的消息进行响应或确认,那么TCP套接字是好的。但是,如果您正在实施某种工作流类型的场景,则应该使用消息队列s、 套接字是用于执行网络通信的应用程序级API。套接字的可靠性取决于您在创建套接字时选择的网络协议。如果选择TCP/IP,您将获得“可靠”传输…达到一定限制。如果选择UDP/IP,您将获得“不可靠”传输 如其他答案中所述,TCP可确保您不会丢失或损坏数据:
因此,您的问题的答案是,它取决于您如何使用套接字,以及您的系统要求的可靠性级别。套接字是可靠的,因为每个通信都是在它之上完成的,包括MQ 但是,您可能希望在MQ中添加一些担保传递,以提高应用程序的可靠性。这是什么?担保传递可确保使用者至少处理一次消息,但不超过一次。 使用者关闭?生产者关闭?MQ服务器关闭?磁盘崩溃?感谢MQ,无论发生什么情况,都不会丢失任何消息(前提是您的管理员知道他的工作)。 除此之外,如果重新启动消费者,则不会对任何消息进行两次处理。如果消息包含百万美元的传输,这一点可能很重要。 但这并不能保证您的邮件在一段可增加的时间内得到处理,而且处理时间有时比保证传递更重要,具体取决于您的应用程序 您可以根据自己的需要选择在服务器之间通信的最佳方式。担保交付既有财务成本,也有性能成本,因此只有在真正需要时才使用(例如,数百万美元的交易) 对于大多数应用程序来说,只有在失败的时候才重新尝试你的消息,才能达到令人满意的效果。但这并不是真正的一次性的交付。不要试图自己实现它,这是一个非常难的事情,只有很少的人能够实现。考虑到重新开发一个与MQ或Apache AQ一样复杂的软件是必要的。> 希望有帮助
- 杰布