我有一个简单的程序,它接收连接,进行一些处理并在标准端口上发送回响应。由于这是同步完成的,如果一个请求花费的时间太长,则不会处理并发请求。
无论是否发生任何阻塞请求,都可以推迟允许同时处理多个请求的方式吗?
谢谢,
我有一个简单的程序,它接收连接,进行一些处理并在标准端口上发送回响应。由于这是同步完成的,如果一个请求花费的时间太长,则不会处理并发请求。
无论是否发生任何阻塞请求,都可以推迟允许同时处理多个请求的方式吗?
谢谢,
这取决于为什么您的请求需要很长时间,如果它是像数据库查询这样的 IO 绑定或对另一台服务器(HTTP、TCP、SMTP 等)的任何类型的请求,那么 EventMachine 就是要走的路。
如果这不是你的情况,你能描述为什么你的请求需要太多时间吗?
最简单的方法是派出一个新线程来处理您的后台任务,然后在执行任何与 EventMachine 相关的操作之前切换回主线程。您可以使用以下defer
方法执行此操作:
def do_something
EventMachine.defer do
do_long_process
end
end
请记住,您的块所触及的应用程序部分必须是线程安全的,并且您需要确保返回到主线程,next_tick
以确保所有 EventMachine 操作都发生在正确的线程上。