来自客户的消息太快了

时间:2018-12-14 20:16:06

标签: python multithreading sockets tcp

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

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

我当时正在考虑使用线程处理此问题。 Thread1可以坐在那里,仅接受来自客户端的传入消息并将它们放入队列,而Thread2将从Thread1读取请求消息并生成响应以发送到客户。发送消息后,Thread2将从Thread1的队列中弹出消息。

这是解决此问题的直接方法吗?

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

1 个答案:

答案 0 :(得分:0)

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

Asyncio与Sanic兼容,但与CherryPy兼容。一切都取决于您的工具。