Node를 자세히 분석합니다.js의 UDP 모듈
.주의: 이 socket은 하나의 Event Emitter 실례이지stream이 아니다. TCP에 비해 그 socket은 Stream 실례이자 Event Emitter 실례이다.
Socket {
domain: null,
_events: { message: [Function], listening: [Function] },
_eventsCount: 2,
_maxListeners: undefined,
_handle:
UDP {
fd: undefined,
lookup: [Function: lookup4],
owner: [Circular],
onmessage: [Function: onMessage] },
_receiving: true,
_bindState: 2,
type: 'udp4',
fd: -42,
_reuseAddr: undefined }
이때 우리 서버는 6666 포트 번호를 귀속했고listening에서 현재 서버가 귀속된 URL과 포트 번호를 얻을 수 있습니다.통과server.address 방법은 서버가 실행하는 주소를 얻을 수 있습니다.메시지에서 이벤트는 두 번째 매개 변수인 rinfo를 통해 출처의 주소를 얻을 수 있습니다.메시지 이벤트에서 얻은 출처에 대한 정보를 살펴보겠습니다.
server.on('message',function(msg,rinfo){
//
console.log(rinfo);
console.log('server got:'+msg+" from "+rinfo.address+":"+rinfo.port);
})
server.on('listening',function(){
//server
var address=server.address();
console.log('server listening '+address.address+":"+address.port);
});
// UDP , 6666 , listening
server.bind(6666);
주의: 즉, 이 서버가 실행된 후에 네트워크 카드의 포트 번호를 감청했다. UDP 클라이언트가 그 호스트에서 메시지를 보내든 수신할 수 있다. 그가 UDP 서버에 감청한 포트 번호만 보내면 된다
문제 2: Class: dgram.Socket에는 어떤 이벤트와 방법이 있습니까?dgram을 통해.createSocket을 만들 필요가 없습니다. 그리고 new 조작부호 이벤트:'close'를 통해 socket이close 방법으로 닫힐 때 터치할 필요가 없습니다. 터치하면 이 socket에서'메시지'이벤트를 터치하지 않습니다.이벤트:'error'이상이 발생했을 때 이벤트를 터치합니다:'listening'은 socket 대상이 패키지의 정보를 감청하기 시작하면, UDP socket이 생성되었을 때 이벤트를 터치합니다:'메시지'첫 번째 파라미터는 버퍼 대상이고, 두 번째 파라미터는 원격 주소 정보입니다.
{ address: '127.0.0.1', family: 'IPv4', port: 55168, size: 12 }
socket.addMembership(multicastAddress[, multicastInterface]) 커널이 고정된 multicastAddress에서 IP_를 사용하도록 알림ADD_MEMBERSHIP 플러그인은 다중 방송 그룹을 통합합니다. 멀티캐스트 인터페이스가 지정되지 않으면 운영체제는 이 구성원들을 모든 유효한 네트워크 카드에 추가하려고 시도합니다.
socket.address()
socket의 모든 정보를 가져옵니다. 보통address,family,port 속성을 포함합니다.
socket.bind([port][, address][, callback])
dgram을 양보하다.Socket은 지정한port/address에서 데이터 패키지를 감청합니다.포트가 지정되지 않으면 운영체제는 <랜덤 포트>를 지정하고address가 지정되지 않으면 운영체제는 <모든 주소 감청>을 지정합니다.리셋 함수는'listening'이벤트의 함수입니다.연결된 메시지 소켓이 Node를js 프로세스가 실행되고 데이터 메시지 정보를 받습니다.
socket.on('message', (msg, rinfo) => {
console.log('Received %d bytes from %s:%d
',
msg.length, rinfo.address, rinfo.port);
});
위의 이 예는 UDP를 사용하여 41234 포트 번호를 감청합니다.socket.bind(options[, callback])
다음 속성을 지원하는 첫 번째 옵션은 필수입니다.포트는address가 선택할 수 있고 exclusive도 선택할 수 있어야 합니다.dgram을 양보하다.Socket은 지정된 포트 번호와 주소에서 데이터 메시지를 감청합니다.포트가 지정되지 않으면 운영체제는 무작위 포트 번호를 연결합니다.address가 지정되지 않으면 모든 주소를 감청합니다.마지막 리셋 함수는'listening'이벤트 핸들입니다.dgram을 사용하고 있다면.Socket 대상을 사용할 때 [cluster] 모듈을 사용합니다. 이 때 exclusive 속성을 사용할 수 있습니다.false로 설정하면 모든 하위 라인은 포트 번호 (기본값) 를 공유하고true로 설정하면 포트 공유를 잘못합니다.
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('error', (err) => {
console.log(`server error:
${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});
server.on('listening', () => {
var address = server.address();
console.log(`server listening ${address.address}:${address.port}`);
});
server.bind(41234);
// server listening 0.0.0.0:41234
socket.close([callback]) socket을 닫고 socket의 데이터를 감청하지 마십시오. 리셋을 지정하면'close'사건의 감청기입니다.
socket.dropMembership(multicastAddress[, multicastInterface])
코어에 IP_ 사용DROP_MEMBERSHIP는 멀티캐스트 주소의 멀티캐스트 그룹을 제거합니다.socket이 닫히거나 프로세스가 멈추면 호스트가 자동으로 호출되기 때문에 대부분의 응용 프로그램은 수동으로 호출할 필요가 없습니다.만약 multicastInterface가 지정되지 않았다면, 운영체제는 유효한 인터페이스의 memebership을 모두 잃어버릴 것이다
socket.send(buf, offset, length, port, address[, callback])
만약address를 지정하지 않았다면 그 값은'0.0.0.0'or':0'입니다. 데이터 패키지가 발송되었는지 확인하는 가장 좋은 방법은 리셋 함수를 지정하는 것입니다. 만약에 오류가 발생하면 리셋 함수를 동시에 지정합니다. 리셋 함수의 첫 번째 매개 변수는 오류 대상입니다.
리셋을 지정하지 않으면 socket의'error'이벤트에서 오류가 발생합니다.
socket.bind({
address: 'localhost',
port: 8000,
exclusive: true
});
UDP 메시지 크기:IPV4/IPV6의 최대 메시지 크기는 MTU(Maximum Transmission Unit) 및 Payload Length 필드 크기에 따라 달라집니다.Payload Length 필드는 16비트 길이, 즉 64KB(메시지 헤더와 데이터 포함)(65507 bytes = 65535−8 bytes UDP header− 20 bytes IP header)를 초과하는 정상 하중입니다.링 인터페이스에 대한 이 값은 모두 정확하지만, 이렇게 큰 데이터 메시지 정보는 대부분의 호스트와 네트워크에 적용되지 않는다.MUT는 지정된 링크 계층 기반이 지원할 수 있는 최대 데이터 메시지 정보를 말합니다.IPV4에 지정된 MTU는 최소 68바이트이지만 IPV4에 권장되는 크기는 576입니다.
IPV6의 경우 최소 MTU는 1280바이트이며 최소 세그먼트의 캐시 크기는 1500바이트입니다.68바이트는 너무 작다. 왜냐하면 대부분의 체인 기술, 예를 들어 이더넷과 같이 가장 작은 MTU가 1500바이트이기 때문이다.수신자를 초과하여 받아들일 수 있는 MTU를 보내는 것은 작용하지 않을 것이다. 왜냐하면 메시지는 조용히 잃어버리고, 발송자에게 데이터가 발송되지 않았다는 것을 알려주지 않기 때문이다.socket.setBroadcast(flag) 설정 또는 지우기 SO_BROADCAST라는 socket 옵션은true로 설정되면 UDP 메시지가 로컬 카드의 방송 주소로 전송됩니다.socket.setMulticastLoopback(flag) 설정 또는 socket 연결의 IP_ 지우기MULTICAST_LOOP (즉, IP 멀티캐스트 루프) 입니다.true로 설정할 때 멀티캐스트 메시지도 로컬 카드에서 socket을 받습니다.setMulticastTTL(ttl) 소켓의 IP_ 설정MULTICAST_TTL 옵션, TTL은'Live to Live'를 대표하는데, 여기에서 하나의 메시지가 허용하는 가장 큰 점프수에 사용되는 것은 당연히 멀티캐스트에 대한 것이다.라우팅과 게이트웨이를 통과할 때마다 TTL이 1씩 감소하고 0으로 감소하면 전송되지 않습니다.매개변수의 범위는 0~255이며 대부분의 시스템은 기본적으로 1입니다.socket.setTTL(ttl) socket 객체의 IP_ 설정이 경우 통과할 수 있는 점프 수를 나타내는 TTL 옵션입니다.인터넷 주소 찾기나 멀티캐스트에 자주 쓰인다.ttl는 0~255 사이이며 대부분의 시스템은 64socket입니다.ref() 기본적으로 socket을 연결하면 Node가 막힙니다.js 프로세스, 이 socket만 열면 계속 막힙니다.socket.unref () 는 현재 socket을 인용 계수에서 제외합니다.socket.ref는 반대로 현재 socket을 인용 계수에 다시 추가하고 이 socket의 기본 동작을 다시 불러옵니다.이 방법은 socket을 되돌릴 수 있기 때문에 체인 호출을 받아들일 수 있습니다.unref () 이 방법은 현재 socket을 인용 계수에서 제외하는 것을 허용합니다. 이 인용이 Node를 초래할 수 있음을 알고 있습니다.js 프로세스는 계속 활동을 유지합니다.이 방법은 현재 socket이 활성 상태에 있을 때
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.