Промежуточные программы Коа (и маршруты) работают с обещаниями. Если обещание разрешается, маршрут считается выполненным, и ответ отправляется клиенту.
Если вы не вернули обещание (или не использовали асинхронную функцию), считается, что промежуточное программное обеспечение выполняется и завершается немедленно. Когда вы звоните ctx.res.end()
, это в основном слишком поздно.
Так, как вы говорите коа не автоматически завершать запрос? Вы можете сделать это, отправив обещание, которое разрешается позже.
Вот пример промежуточного программного обеспечения, которое отправляет обещание, которое никогда не разрешается:
const myMw = ctx => {
return new Promise( () => {});
}
Учитывая, что вы переходите с экспресса на коа (отличный выбор!), Вам не следует пытаться точно использовать те же шаблоны из экспресса. Длинный опрос действительно хорошо подходит для решения, обещающего первое обещание.
Я очень рекомендую вам использовать обещания для всего. Если клиент «публикует» сообщение для каждого другого клиента, это должно привести к выполнению множества обещаний.