jsrosetta

I/O

UDP Server

dgram.createSocket của Node.js so với net.ListenUDP (Go), UdpSocket (Rust), Network.framework (Swift) và DatagramSocket (Java) để nhận datagram.

Phiên bản tối thiểu
Node.js ≥ 12.20Go ≥ 1.0Rust ≥ 1.58Swift ≥ 5.7Java ≥ 25
Đã chạy thử trên
Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1

Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.

UDP là giao thức không kết nối: không có Accept() để chờ client, mỗi gói tin (datagram) tự mang theo địa chỉ người gửi. Node.js dùng module dgram với event 'message', Go và Rust đọc trực tiếp bằng ReadFromUDP/recv_from trong một vòng lặp, Swift lại dùng Network.framework (không có socket UDP thô nào trong Foundation), còn Java dùng DatagramSocket/DatagramPacket có sẵn từ những phiên bản đầu tiên.

Server nhận datagram

import dgram from 'node:dgram'
 
const server = dgram.createSocket('udp4')
 
server.on('error', err => {
  console.error(err)
  server.close()
})
 
server.on('message', (msg, rinfo) => {
  const data = msg.toString('utf8').trim()
  console.log(`received: ${data} from ${rinfo.address}:${rinfo.port}`)
})
 
server.on('listening', () => {
  const address = server.address()
  console.log(`server listening ${address.address}:${address.port}`)
})
 
server.bind(3000)
$ node udp_server.js
server listening 0.0.0.0:3000
received: hello world from 127.0.0.1:59740
 
$ go run udp_server.go
server listening [::]:3000
received: hello world from 127.0.0.1:52082
 
$ cargo run
server listening 0.0.0.0:3000
received: hello world from 127.0.0.1:53544
 
$ swift udp_server.swift
server listening 0.0.0.0:3000
received: hello world from 127.0.0.1:52756
 
$ java Main.java
server listening 0.0.0.0:3000
received: hello world from 127.0.0.1:55056

Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#udp-server