首页 > 解决方案 > 来自客户端的消息来得太快

问题描述

我正在编写一个接受来自一个客户端的消息的 Python TCP/IP 服务器。收到消息后,我会解析 TCP 消息并根据其消息类型生成响应,并将生成的响应发送给客户端。

我的应用程序运行良好,直到您很快收到多条消息。我的服务器在处理消息时似乎阻塞了 I/O。例如,当我处理第三条消息时,我的服务器永远不会接受第四条消息,因为我仍在处理第三条消息。因此,第四条消息在空间中丢失了。

我正在考虑使用线程处理这个问题。Thread1可以坐在那里,只接受来自客户端的传入消息并将它们放入队列中,同时Thread2将从中读取请求消息Thread1并生成要发送给客户端的响应。发送消息后,Thread2会从Thread1's Queue 中弹出消息。

这是立即解决这个问题的吗?

编辑:经过更多测试,我意识到我总是收到客户的消息;但是,如果客户端没有收到响应消息,客户端会在 5-10 秒后超时。我需要加快消息处理速度,因为我的服务器认为一切都很好,因为它实际上接收了所有消息并且不会像我之前想的那样丢失任何消息。问题是客户不耐烦。有关如何加快性能的任何提示?每个请求的进程并行运行,因此工作被平均分配?我看到的唯一问题是,在我处理另一条消息时很少有消息进来。

标签: pythonmultithreadingsocketstcp

解决方案


线程解决方案应该可以工作,但是如果您使用的是 3.4 或更高版本,您可能更愿意考虑使用asyncio,它使用协程而不是线程,并且在我看来更易于使用。但是,这也取决于您使用的服务器库。

Asyncio 适用于Sanic,但不适用于 CherryPy。这完全取决于您的工具。


推荐阅读