Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 插座可靠吗?_Sockets_Communication_Reliability_Qos - Fatal编程技术网

Sockets 插座可靠吗?

Sockets 插座可靠吗?,sockets,communication,reliability,qos,Sockets,Communication,Reliability,Qos,使用套接字在两台服务器之间发送数据是一个好主意,还是应该使用MQ之类的工具来移动数据 我的问题:如果我只需要一次/有保证地交付数据,那么套接字是否可靠 还有其他解决办法吗 谢谢。套接字与您的实现一样可靠,并且基于底层硬件。如果您不想麻烦地提供有保证的交付服务(在什么条件下?100%永远不会发生),那么消息队列系统是一个不错的选择。消息队列将实现所有持久性、排队、重试等,如果使用标准套接字,则需要自己实现这些功能 如果无论发生什么情况都需要有保证的交付(例如,如果另一方脱机进行维护),并且您不想自

使用套接字在两台服务器之间发送数据是一个好主意,还是应该使用MQ之类的工具来移动数据

我的问题:如果我只需要一次/有保证地交付数据,那么套接字是否可靠

还有其他解决办法吗


谢谢。

套接字与您的实现一样可靠,并且基于底层硬件。如果您不想麻烦地提供有保证的交付服务(在什么条件下?100%永远不会发生),那么消息队列系统是一个不错的选择。消息队列将实现所有持久性、排队、重试等,如果使用标准套接字,则需要自己实现这些功能

如果无论发生什么情况都需要有保证的交付(例如,如果另一方脱机进行维护),并且您不想自己编写所有逻辑,那么您可能应该使用MQ。套接字是用于连接到另一方的设备,无论该方是MQ还是消息的最终接收者。

套接字是传输数据的原始机制。其他的一切都是在这个基础上实现的。在第四层,它们属于第四层。尽管它们实现了可靠的端到端连接,但很少用作端协议。您几乎总是需要实现应用程序层。这将取决于您的应用程序(您需要传输文件还是只发送消息)和您的网络基础设施。

如果您使用,TCP协议可确保数据在传输过程中不会丢失,也不会损坏(尽管你必须决定它的16位校验和是否足够,或者你需要一个应用层校验和机制)


MQ系统提供的以及您可能需要或不需要的是应用程序级可靠性,即即使在遇到间歇性硬件或软件故障时也能保证交付的能力。

根据数据类型,简单的web服务可能是最快的解决方案。它们相对容易设置和测试。尽管对于某些spe来说cific示例我需要知道您正在运行的是哪种数据和环境。

这在很大程度上取决于您正在开发的应用程序的类型。如果您正在编写一个程序,需要对发送的消息进行响应或确认,那么TCP套接字是好的。但是,如果您正在实施某种工作流类型的场景,则应该使用消息队列s、

套接字是用于执行网络通信的应用程序级API。套接字的可靠性取决于您在创建套接字时选择的网络协议。如果选择TCP/IP,您将获得“可靠”传输…达到一定限制。如果选择UDP/IP,您将获得“不可靠”传输

如其他答案中所述,TCP可确保您不会丢失或损坏数据:

  • 如果有足够长的网络 中断,或发送方或接收方 如果TCP/IP连接断开 除非您 采取步骤重新启动系统 连接
  • 如果有网络 级别数据损坏,存在 不太可能 由校验和检测
  • 要获得比TCP/IP提供的更高级别的可靠性保证,您需要在应用程序基于套接字的网络层的顶部实现更敏感的校验和和有保证的传递机制。或者使用为您做艰苦工作的消息队列产品


    因此,您的问题的答案是,它取决于您如何使用套接字,以及您的系统要求的可靠性级别。

    套接字是可靠的,因为每个通信都是在它之上完成的,包括MQ

    但是,您可能希望在MQ中添加一些担保传递,以提高应用程序的可靠性。这是什么?担保传递可确保使用者至少处理一次消息,但不超过一次。 使用者关闭?生产者关闭?MQ服务器关闭?磁盘崩溃?感谢MQ,无论发生什么情况,都不会丢失任何消息(前提是您的管理员知道他的工作)。 除此之外,如果重新启动消费者,则不会对任何消息进行两次处理。如果消息包含百万美元的传输,这一点可能很重要。 但这并不能保证您的邮件在一段可增加的时间内得到处理,而且处理时间有时比保证传递更重要,具体取决于您的应用程序

    您可以根据自己的需要选择在服务器之间通信的最佳方式。担保交付既有财务成本,也有性能成本,因此只有在真正需要时才使用(例如,数百万美元的交易)

    对于大多数应用程序来说,只有在失败的时候才重新尝试你的消息,才能达到令人满意的效果。但这并不是真正的一次性的交付。不要试图自己实现它,这是一个非常难的事情,只有很少的人能够实现。考虑到重新开发一个与MQ或Apache AQ一样复杂的软件是必要的。> 希望有帮助

    • 杰布

    @modosansreves:如果加扰的单词只要第一个字母和最后一个字母都在,那么不正确的语法不会造成太大的伤害。请关注信息,而不是单个单词。+1:使用“sockets IS”当然,这可能是一个完全的巧合,但很有趣。套接字与OSI网络模型无关。套接字是(潜在)的接口双向缓冲通信,它的价值来源于它可以连接到任何底层通道,并支持底层通信通道的多种属性。除了原始/tcp/udp和其他网络通信,您还可以使用套接字通过管道或您使用的任何通道进行本地通信想象一下,不要把这个概念简化为OSI。