~2 دقیقه مطالعه • بروزرسانی ۹ دی ۱۴۰۴
1. معرفی
ماژول node:dgram امکان کار با پروتکل UDP را در Node.js فراهم میکند. این ماژول از IPv4 و IPv6 پشتیبانی کرده و قابلیتهای multicast، broadcast و سوکتهای UDP متصل (connected) را ارائه میدهد.
2. ساخت سوکت UDP
const dgram = require('node:dgram');
const server = dgram.createSocket('udp4');
3. رویدادهای اصلی سوکت
3.1 'error'
در صورت بروز هر خطا روی سوکت فراخوانی میشود.
3.2 'message'
هنگامی که دیتاگرامی دریافت شود، این رویداد فعال میشود.
3.3 'listening'
پس از bind شدن سوکت و آماده شدن برای دریافت پیام.
3.4 'close'
پس از بسته شدن سوکت.
3.5 'connect'
پس از اتصال موفق سوکت UDP به مقصد.
4. bind کردن سوکت
برای دریافت پیام، سوکت باید bind شود:
socket.bind(41234);
5. ارسال دیتاگرام
UDP میتواند Buffer، رشته، TypedArray، DataView یا آرایهای از Bufferها را ارسال کند.
5.1 ارسال بدون اتصال (Connectionless)
client.send(message, 41234, 'localhost');
5.2 ارسال با سوکت متصل (Connected UDP)
client.connect(41234, 'localhost', () => {
client.send(message);
});
6. پشتیبانی Multicast
6.1 عضویت در گروه Multicast
socket.addMembership('224.0.0.114');
6.2 Multicast مبتنی بر منبع (Source-Specific)
socket.addSourceSpecificMembership(source, group);
6.3 خروج از گروه
socket.dropMembership(address); socket.dropSourceSpecificMembership(source, group);
7. Broadcast
socket.setBroadcast(true);
8. مدیریت بافر و صف ارسال
socket.getRecvBufferSize()socket.getSendBufferSize()socket.setRecvBufferSize(size)socket.setSendBufferSize(size)socket.getSendQueueSize()socket.getSendQueueCount()
9. TTL و Multicast TTL
socket.setTTL(ttl): برای unicastsocket.setMulticastTTL(ttl): برای multicast
10. انتخاب رابط Multicast
برای تعیین رابط خروجی بستههای multicast:
socket.setMulticastInterface('10.0.0.2'); // IPv4
socket.setMulticastInterface('::%eth0'); // IPv6
11. ref و unref
کنترل اینکه سوکت فرآیند Node.js را زنده نگه دارد یا نه:
socket.unref(); socket.ref();
12. BlockList
برای مسدود کردن IPها یا محدودههای خاص:
receiveBlockList: new net.BlockList() sendBlockList: new net.BlockList()
13. پشتیبانی AbortSignal
بستن سوکت با AbortController:
const controller = new AbortController();
const server = dgram.createSocket({ type: 'udp4', signal: controller.signal });
controller.abort();
14. محدودیت اندازه دیتاگرام
- حداکثر تئوری: ~65KB
- MTU معمول IPv4: حدود 576 بایت
- حداقل MTU IPv6: 1280 بایت
15. dgram.createSocket()
گزینههای مهم:
- type: 'udp4' یا 'udp6'
- reuseAddr / reusePort
- ipv6Only
- recvBufferSize / sendBufferSize
- lookup سفارشی
- signal برای Abort
- receiveBlockList / sendBlockList
نتیجهگیری
ماژ
نوشته و پژوهش شده توسط دکتر شاهین صیامی