在Node.js中处理Swift客户端的长时间请求



所以我目前正在使用socket.io加载屏幕,但它不起作用,所以我将尝试不同的解决方案。我需要以下操作:用户打开我的应用程序——这会触发服务器端的一个功能(大约需要8秒的CPU密集型抓取功能(。功能完成后,我需要通知客户端功能完成,客户端获取结果(获取此结果后,应用程序加载屏幕关闭,用户进入应用程序(。

我目前的实现是使用socket.io发射,并通过后台线程上的Redis队列处理抓取功能。

是否有不同的方法来实现这一点,而不是套接字连接和从客户端发送发射->服务器,反之亦然?

我不认为我可以只处理一个经典的GET请求,因为在等待响应的同时,让一个长时间运行(8秒(的请求打开这么长时间不是一种糟糕的做法吗?此外,我查看了服务器发送的事件,但我不确定在这种情况下是否能够使用它。

任何见解都将不胜感激!

8秒对于来自";健康的";服务器,但应该仍然可以。我只需要使用来自移动客户端的GET,并编写它以在UI等待时不阻塞它。

编写用户界面,以便通知用户正在等待响应,甚至可以让用户知道响应可能需要多长时间。

需要记住的几点。

  1. nodejs通常可以进行大量并发的web抓取:大多数web抓取占用的时间都花在等待被抓取的服务器做出响应上。nodejs是异步的。因此,工作线程可能没有多大帮助。它们肯定会使您的服务器应用程序更加复杂。一个很好的扩展选择可能是集群你的nodejs应用程序
  2. 编写服务器以暂停对GET请求的响应几秒钟并没有什么害处,但会损害用户体验。如果你的用户在这几秒钟里有一些合理的东西可以看,你可能会逃脱惩罚
  3. 如果您的用户在暂停期间正在查看网页,您可以使用xhr或从页面中的Javascript代码中提取数据,同时使用微调器或一些类似的用户界面内容来娱乐他们

最新更新