-
18-09-2019 - |
题
它是一个好主意,使用套接字发送数据之间的两台服务器,或者我应该使用什么样的MQ动的数据。
我的问题:是插座可靠,如果我需要一次仅/有保证的递送的数据?
是否有任何其他的解决方案?
谢谢。
解决方案
插座是一个应用程序级API用于进行网络连通。可靠的接口取决于网络的协议,选择时,你创建这座。如果你选择TCP/IP,你将获得"可靠的"转移...到限制。如果你选择UDP/IP你会得到"不可靠"的转让。
正如在其他的答案,TCP确保不会丢失或损坏数据达到一点:
- 如果有一个足够长的网络 中断,或发送者或接收器 死TCP/IP connection将打破 你会丢失数据,除非你 采取步骤重新启动 连接。
- 如果有一个网 一级数据的腐败,还有一个 小的概率,也不会是 通过检测校验和。
更高水平的可靠性保障,比TCP/IP提供,需要实施更加敏感的校验和检查,并保证的交付机制的应用程序的Socket-基于网络层。或者使用一个消息队的产品,并努力的为你工作。
所以回答你的问题是,它取决于你如何使用插座,以及在什么水平的可靠性系统的需要。
其他提示
套接字是,你让你实现可靠的,并且基于底层硬件。如果你不想让(在什么情况下?100%是永远不会发生的)保证送货服务的麻烦,消息队列系统是一个不错的选择。消息队列将已经实现了所有的执着,排队,重试,等你需要实现自己,如果你用标准插座去了。
您应该使用的MQ,如果你需要保证交付不管发生什么(例如,如果对方下线维护),你不想自己写所有的逻辑。套接字是你用什么来连接到对方,不管该当事方是MQ或消息的最终接收者。
插座是可靠的,因为每一个通信是在它上面的,包括MQ。
但是你可能想添加一些保证下交付MQ的可靠性的提高应用程序。这是什么?保证下的交付,确保您的消息是处理至少一次,并且没有多于一次,通过消费者。消费者?生产者关闭?MQ服务器?磁盘崩溃?由于MQ,没有消息会被丢掉,不管发生什么(条件是管理员知道他的工作)。此外,如果重新启动的消费者,没有消息将处理的两倍。这可能是重要的,如果消息含有百万美元转账。但它并不能保证你的信息进行处理raisonnable量的时间。和处理时间的某个时候更加重要的是保证下的交付,取决于应用程序。
它是由你来选择的最佳方式之间的通信服务器取决于你的需求。保证下交付提供了财政和业绩成本,所以它只能用如果真的需要(百万美元转帐)。
对于大多数应用程序可以实现令人满意的东西只有通过你重新尝试的消息当然会失败。但是没有真正的一次只保证下交付。不要试图实现它自己,它是一个非常困难的东西,只有少数能够实现的。这是useles考虑redevelopping软件作为复杂,因为MQ或Apache AQ。
希望这有所帮助。
- 杰布
插座是用于传输数据的原始机制。其它所有东西都在此之上实现的。在 OSI网络它们属于层4.虽然它们实现可靠的终端对终端的模型连接,它们很少使用作为结束协议。你几乎总是需要实现的应用层。什么这将是取决于你的应用程序(你需要传输文件或只发送消息)和网络基础设施。
根据数据的类型的简单的web服务可能是最快的溶液。他们比较容易建立和测试。虽然对一些具体的例子我需要知道你正在运行什么样的数据和环境的。
有大量迁入取决于应用程序的您正在开发的类型。它你写,你需要再发送TCP套接字是好消息的响应或ACK的程序。但是,如果你正在实施一些工作流程那种情景,你应该使用消息队列。