(as I’ve been name checked)
Stephen,
Yes in the context of a single volley, then a ^jsonopen() call is going to block the processing in that volley. There is nothing in CS script to do anything otherwise.
But as Bruce says, in a production environment then you use the fork parameter to spin up many parallel instances of the engine. The only thing that you have to be careful of is to make sure that a second utterance from the same user is not run at the same time. Doing so will play havoc with the topic file!
Our bot is script heavy and very data driven so there are often many ^jsonopen() calls per volley, though those are all back to our internal systems therefore we have some control over the performance and we have tweaked those APIs to reduce some overhead. Those are not generally a significant issue for us.
But our system does allow people to define requests to external systems where the response times cannot be so managed. In those cases we don’t make the (outside) request directly from CS, instead control is returned back to our platform tier and then it will initiate another request back to CS when the results are in. We do the same for webhook style processing. Essentially a callback, with plenty of data in the OOB for coordination. But it does release the CS process for other user requests in the mean time.
The moral is that we use CS for the things it does best and if there is a need for external access then we bounce back to the higher tier. There may be several back and forths in a single user “volley”, but as CS is stateless then we can support a large number of users without being hung up by external systems.
Hope this helps.
Andy