استطلاع طويل في Mochiweb - كيفية معرفة ما إذا كان العميل قد أدى إلى طلب طلب؟
سؤال
لديّ حلقة اقتراع أساسية من موتشييب تشبه ما يلي ، باستثناء أنها تفعل أشياء أخرى بدلاً من الطباعة إلى وحدة التحكم وتعود في النهاية:
blah() ->
io:format("Blah")
blah()
loop(Req) ->
PathParts = string:tokens(Req:get(path), "/")
case PathParts of
["poll"] ->
blah()
هذا يعمل بشكل رائع حتى يقوم العميل بإحباط طلبه. على سبيل المثال ، إذا كانت نافذة العميل مغلقة ، فستظل هذه العملية تعمل إلى أجل غير مسمى.
أود أن أعرف ما إذا كان هناك خيار في بداية () Mochiweb أو ربما شيء آخر أتفوق عليه من شأنه أن ينهي هذه العملية تلقائيًا ، أو على الأقل إرسال رسالة على إحباط العميل. أيه أفكار؟
المحلول
يشبه واحد الحل هو إعداد عملية أخرى للاتصال مرارًا وتكرارًا gen_tcp:recv(Req:get(socket), 0, 1)
والبحث عن النتيجة {error, closed}
, ، ثم قتل عملية الاقتراع إذا تم استلامها ... لست متأكدًا مما إذا كان هذا هو الأمثل.
لا تنتمي إلى StackOverflow