Nodejs TCP 서버 만 들 기 - king 0222
require('net').createServer(function(socket) {
// new connection
socket.on('data', function(data) {
// got data
});
socket.on('end', function(data) {
// connection closed
});
socket.write('Some string');
}).listen();
var server = require ('net'). createServer () 를 통 해;이 코드 는 tcp 서버 대상 의 인용 을 얻 을 수 있 습 니 다.
server 대상 구 는 다음 과 같은 몇 가지 감청 사건 을 등록 하 였 습 니 다.
listening,connection,close,error
다음 예 는 TCP 서버 의 성명 주기 에서 상기 몇 가지 사건 을 감청 한 것 입 니 다.
var server = require('net').createServer();
var port = ;
server.on('listening', function() {
console.log('Server is listening on port', port);
});
server.on('connection', function(socket) {
console.log('Server has a new connection');
socket.end();
server.close();
});
server.on('close', function() {
console.log('Server is now closed');
});
server.on('error', function(err) {
console.log('Error occurred:', err.message);
});
server.listen(port);
연결 이 성공 하면 socket 대상 을 리 셋 의 매개 변수 로 얻 을 수 있 습 니 다. 이 socket 대상 을 조작 할 수 있 습 니 다. 앞에서 tcp 연결 대상 은 읽 고 쓸 수 있 는 흐름 이 라 고 언급 한 적 이 있 습 니 다.스 트림 대상 으로서 data, end 등 사건 을 감청 할 수 있 습 니 다.쓰기 가능 한 흐름 으로서 write () 방법 이 있 습 니 다.다음은 사용자 의 입력 을 감청 할 수 있 는 예 입 니 다.
var server = require('net').createServer(function(socket) {
console.log('new connection');
socket.setEncoding('utf');
socket.write("Hello! You can start typing. Type 'quit' to exit.
");
socket.on('data', function(data) {
console.log('got:', data.toString())
if (data.trim().toLowerCase() === 'quit') {
socket.write('Bye bye!');
return socket.end();
}
//
socket.write(data);
});
socket.on('end', function() {
console.log('Client connection ended');
});
}).listen();
socket 대상 은 또 읽 을 수 있 는 흐름 이기 때문에 그의 pause () 와 resume () 을 공기 시 킬 수 있 거나, 직접 pipe () 방법 으로 쓰기 가능 한 흐름 을 출력 할 수 있 습 니 다.
var ws = require('fs').createWriteStream('helloworld.txt');
require('net').createServer(function(socket) {
socket.pipe(ws);
}).listen();
위의 코드 는 스 트림 대상 을 만 든 다음 스 트림 대상 을 클 라 이언 트 에 출력 합 니 다.클 라 이언 트 에서 helloworld. txt 라 는 파일 을 얻 을 수 있 습 니 다.
"telnet localhost 4001" 으로 이 예 를 테스트 할 수 있 습 니 다.
socket 대상 은 읽 을 수 있 는 흐름 의 성질 과 쓸 수 있 는 흐름 의 성질 을 동시에 가지 기 때문에 위의 예 는 다음 과 같은 코드 를 거꾸로 형성 할 수 있 습 니 다.
require('net').createServer(function(socket) {
var rs = require('fs').createReadStream('hello.txt');
rs.pipe(socket);
}).listen();
위의 코드 는 hello. text 파일 내용 을 socket 대상 에 출력 하여 클 라 이언 트 에 게 되 돌려 줍 니 다. 내용 출력 이 완료 되면 tcp 연결 이 종 료 됩 니 다. 앞의 글 에서 Pipe 의 용법 이 있 습 니 다. 기본 적 인 상황 에서 데이터 읽 기 가 완료 되면 end 방법 이 실 행 됩 니 다. 따라서 이러한 효 과 를 원 하지 않 고 연결 을 유지 하려 면 pipe 에 두 번 째 인 자 를 추가 할 수 있 습 니 다.{end: false}, end 감청 을 다시 씁 니 다.
2. 유 휴 socket 이 유 휴 socket 이 나타 날 때 우 리 는 해당 하 는 제거 작업 을 해 야 합 니 다. setTimeout 방법 으로 유 휴 socket 대상 을 닫 아 줄 수 있 습 니 다.
var timeout = ; // minute
socket.setTimeout(timeout);
socket.on('timeout', function() {
socket.write('idle timeout, disconnecting, bye!');
socket.end();
});
다음은 더욱 간결 한 사용 방식 이다.
socket.setTimeout(60000, function() {
socket.end('idle timeout, disconnecting, bye!');
});
3. 연결 유지
socket.setKeepAlive(true);
두 번 째 매개 변 수 를 추가 할 수 있 습 니 다.
socket.setKeepAlive(true, 10000); // 10 seconds
4. 사용 지연 여부
kernel 은 tcp 패 킷 을 보 내기 전에 데 이 터 를 캐 시 하기 때문에 일정한 지연 시간 을 차지 합 니 다. 이것 은 일부 작은 패 킷 장면 에 유용 하지만 이러한 지연 시간 이 있 기 를 원 하지 않 는 다 면 이렇게 설정 할 수 있 습 니 다.
socket.setNoDelay(true);
var port = ;
var host = '...';
server.listen(port, host);
listen 방법의 두 번 째 매개 변 수 는 클 라 이언 트 의 ip 주 소 를 감청 하 는 것 입 니 다. 작성 하면 입력 한 ip 만 감청 합 니 다. 그렇지 않 으 면 모든 ip 주 소 를 감청 하고 기본 적 인 상황 에서 작성 하지 않 습 니 다. 서버 연결 을 닫 으 면 close 방법 을 사용 할 수 있 으 며 이 사건 을 감청 할 수 있 습 니 다.
server.close();
server.on('close', function() {
console.log('server closed!');
});
6. 간단 한 TCP 채 팅 방 서버 만 들 기
var net = require('net');
var server = net.createServer();
var sockets = [];
server.on('connection', function(socket) {
console.log('got a new connection');
sockets.push(socket);
console.log('sockets length:', sockets.length);
socket.on('data', function(data) {
console.log('got data:', data.toString());
sockets.forEach(function(otherSocket) {
if (otherSocket !== socket) {
otherSocket.write(data);
}
});
});
socket.on('close', function() {
console.log('connection closed');
var index = sockets.indexOf(socket);
sockets.splice(index, );
console.log('sockets length:', sockets.length);
});
});
server.on('error', function(err) {
console.log('Server error:', err.message);
});
server.on('close', function() {
console.log('Server closed');
});
server.listen();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.