Dark mode
dgram
dgram เป็นโมดูลในตัวของ Node.js ที่ให้ความสามารถในการสร้าง UDP/Datagram sockets สำหรับการสื่อสารแบบไม่มีการเชื่อมต่อ (connectionless)
Import
js
import { createSocket } from "node:dgram";
API
API | คำอธิบาย | ลักษณะ | คำอธิบายเพิ่มเติม |
---|---|---|---|
createSocket | สร้าง UDP socket | Asynchronous | ใช้สำหรับส่งและรับ UDP datagrams รองรับทั้ง IPv4 และ IPv6 |
socket.send | ส่ง UDP datagram | Asynchronous | สามารถระบุ port และ address ปลายทางได้ |
socket.bind | ผูก socket กับ port และ address | Asynchronous | จำเป็นต้อง bind ก่อนรับข้อมูล |
socket.close | ปิด socket | Asynchronous | หยุดรับข้อมูลและปล่อยทรัพยากร |
ตัวอย่าง
สร้าง UDP Server และ Client
Server
js
// server.js
import dgram from "dgram";
// สร้าง UDP server
const server = dgram.createSocket("udp4");
server.on("error", (err) => {
console.error(`Server error:\n${err.stack}`);
server.close();
});
server.on("message", (msg, rinfo) => {
console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on("listening", () => {
const address = server.address();
console.log(`Server listening ${address.address}:${address.port}`);
});
// ผูก socket กับ port 41234
server.bind(41234);
Client
js
// client.js
import { Buffer } from "buffer";
import dgram from "dgram";
// สร้าง UDP client
const client = dgram.createSocket("udp4");
const message = Buffer.from("Hello UDP Server");
// ส่งข้อความไปยัง server ที่ localhost port 41234
client.send(message, 41234, "localhost", (err) => {
if (err) {
console.error("ส่งข้อมูลไม่สำเร็จ:", err);
}
client.close();
});
รับข้อมูลแบบ Multicast
js
import dgram from "dgram";
const socket = dgram.createSocket("udp4");
socket.on("listening", () => {
const address = socket.address();
console.log(`Listening on ${address.address}:${address.port}`);
// เข้าร่วม multicast group
socket.addMembership("224.0.0.114");
});
socket.on("message", (message, remote) => {
console.log(
`Received multicast message from ${remote.address}:${remote.port} - ${message}`,
);
});
socket.bind(41234);
ตั้งค่า Socket Options
js
import dgram from "dgram";
const socket = dgram.createSocket({
type: "udp4",
reuseAddr: true, // อนุญาตให้ reuse address ได้
recvBufferSize: 1024 * 1024, // ตั้งค่า buffer size เป็น 1MB
});
socket.on("message", (msg) => {
console.log("Received:", msg.toString());
});
socket.bind(41234);
ตรวจสอบข้อมูล Address
js
import dgram from "dgram";
const socket = dgram.createSocket("udp4");
socket.bind(41234, () => {
const address = socket.address();
console.log("Socket info:", {
address: address.address,
port: address.port,
family: address.family,
});
});