【发布时间】:2013-08-10 12:36:47
【问题描述】:
我有 10 条消息/秒(总活动)来自 40 个客户端的 TCP。 我需要接收每条消息并执行 5 秒的过程(查找 Web 服务,执行一些 DB 查询,最后将结果写入 DB)。
如何区分来自缓慢的 5 秒进程的消息?此外,我可能会在已经为该客户端处理消息的同时收到来自客户端的另一条消息。我永远不想丢失消息。
【问题讨论】:
-
是什么让您认为您正在丢失消息?如果您使用 TCP,则在操作系统级别存在排队。 TCP不是面向消息的协议,它是面向流的。字节只是堆积在缓冲区中,直到您的应用程序读取它们。您的应用程序不会遗漏任何内容。
-
埃里克你说得很好。我会测试一下。我让服务器休眠并发送 150 条消息。然后当它醒来时,我会检查他们是否到达。回答您的问题:客户抱怨消息“可能”丢失。我需要改变一些事情,这样我们才能知道真正发生了什么。
-
我将阅读 TDD for Twisted。 twistedmatrix.com/documents/12.2.0/core/howto/trial.html
-
您是否实现了应用程序的客户端部分?如果是这种情况,检查“丢失”消息应该相对容易。
-
好问题。我无法控制客户质量。他们被赋予了一个简单的文本协议来遵循。他们自己实施。第二个目标是找出哪些客户端没有按预期工作。 (应用程序所有者将订购重建)。我已经启动了一个小测试服务器,它通过一系列测试运行客户端。我还启动了一个以理想方式工作的虚拟客户端。
标签: python multithreading multiprocessing twisted zeromq