Nodejs TCP 서버 만 들 기 - king 0222

6074 단어
1. Nodejs 는 net 모듈 을 제공 하기 때문에 TCP 서버 를 만 드 는 것 은 간단 합 니 다.

 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();

좋은 웹페이지 즐겨찾기