ضربانهای WebSocket در مرورگر به یک پروتکل کاربردی نیاز دارند
وقتی جاوااسکریپت مرورگر نمیتواند قابهای Ping وبسوکت را مستقیماً بفرستد، یک ضربان کاربردی مورد توافق طراحی کنید.
API وبسوکت مرورگر send() دارد. این API روش عمومی ping() را برای جاوااسکریپت فراهم نمیکند تا قابهای Ping پروتکل را بفرستد.
اگر برنامه شما پیام متنی مانند {"type":"heartbeat"} بفرستد، این داده کاربردی است. سرور باید پیام را بفهمد و پاسخی تعریف کند. سروری که آن قرارداد را پیادهسازی نمیکند، الزامی ندارد فقط به این دلیل که متن واژه ping را دارد با Pong پروتکل پاسخ دهد.
تعریف کنید تأیید چه معنایی دارد، چگونه ضربان در انتظار را شناسایی میکند و تأیید قدیمی چه زمانی بسیار دیر است. این را از تأیید یک عملیات تجاری جدا نگه دارید.
تایمر جاوااسکریپت هم محدودیت زمانبندی دارد. زبانههای پسزمینه و رشتههای اصلی مشغول میتوانند فراخوانیها را به تأخیر بیندازند. از دست رفتن یک مرز دقیق تایمر را شاهدی قطعی بر این نگیرید که پروکسی دیگر هدایت نمیکند.
مرورگر میتواند قابهای کنترلی پروتکل را درونی مدیریت کند، اما این به کد برنامه دیدی قابل حمل از هر Ping یا Pong نمیدهد. اگر صفحه به تصمیم زندهبودن خودش نیاز دارد، از یک قرارداد کاربردی صریح و سیاست بازیابی استفاده کنید.
سوکتی که readyState آن OPEN است محلی باز در نظر گرفته میشود؛ این سنجش مستقلی نیست که برنامه دور آخرین پیام شما را پردازش کرده است. از شواهدی استفاده کنید که با پرسشی که واقعاً باید پاسخ دهید همخوان باشد.