zoukankan      html  css  js  c++  java
  • nodeAPI--TCP

    Node HTTP服务器是构建与Node TCP服务器之上的,即http.Server继承自net.Server;

    TCP特性:

    • 面向连接的通信和保证顺序的传递:
      • IP的协议是面向无连接,且数据包送达时是无序的,这些数据包不属于任何数据流或连接;
      • 使用TCP/IP和服务器建立连接后,在TCP连接内进行数据传输时,发送的IP数据报包含了标识该连接及数据流顺序的信息;
    • 面向字节:
      • TCP对字符及字符编码是完全无知的,不同的编码会导致传输的字符数不同;
      • 所以TCP允许数据以ASCII字符(每个字符一个字节)或Unicode(每个字符四个字节)进行传输;
    • 可靠性:由于TCP是基于底层不可靠的服务,所以它必须要基于确认和超时实现一系列机制来达到可靠性要求;
    • 流控制:TCP会通过流控制的方式来确保两点之间数据传输的平衡;//如两台通信计算机传输速度不同;
    • 拥堵控制:TCP有一种内置的机制能控制数据包的延迟率以及丢包率不会太高;

    Telnet:

    • 早期的网络协议,旨在提供双向的虚拟终端,后被SHH替代;
    • Telent是明码传输,SSH是加密传输;
    • Telnet是TCP协议上层的协议;

     基于TCP的聊天程序: //在window下会出现问题;

    var net=require('net');
    
    var count=0,users={};
    
    var server=net.createServer(function (conn) {
    conn.write(
        '
     > welcome to 33[92mnode-chat33[39m!'
      + '
     > ' + count + ' other people are connected at this time.'
      + '
     > please write your name and press enter: '
    );
    count++;
    
    var nickname;
    
    function broadcast (msg,exceptMyself) {
      for (var i in users) {
       if (!exceptMyself || i != nickname) {
        users[i].write(msg);
       }
      }
    }
    
    conn.on('data',function (data) {
      //data=data.replace('
    ','');
      if(!nickname){
       if(users[data]){
        conn.write('
     33[93m> nickname already in use.try again:33[39m ');
        return;
       }else{
        nickname=data;
        users[nickname]=conn;
    
        broadcast('
     33[90m > ' + nickname + ' joined the room33[39m'); 
       }
      }
      else{
        broadcast('
     33[96m > ' + nickname + ':33[39m ' + data,true); 
      }
    });
    conn.setEncoding('utf8');
    conn.on('close',function () {
      count--;
      delete users[nickname];
      broadcast('
     33[90m > ' + nickname + ' left the room33[39m');
    });
    });
    
    server.listen(3000,function () {
    console.log('
     33[96m   server listening on *:300033[39m');
    }); 
    • createServer回调函数接受一个对象,他是可读写的流对象,传递net.Stream;
    • Node.js中有两个和连接终止相关的事件:  //触发的时候会发送一个名为‘FIN'的包给服务器,意味结束连接;
      • end:客户端关闭TCP连接时触发;
      • close:客户端关闭连接或发生error事件时触发;

    //window退出telnet: ctrl + ], quit; mac: alt + [, quit;           window回车:' ',    mac回车:' ';

  • 相关阅读:
    五种方法实现python3-随机生成10位包含数字和字母的密码
    用matplotlib中imshow()函数绘图
    MTNET 自用ios网络库开源
    移动时代软件测试团队该往哪里去?
    自己做的加速app测试流程的小工具,目前打算开放使用,想注册的朋友抓紧了,嘻嘻
    golang append
    Invalid Image Path
    xcode 插件之KSImageNamed-Xcode
    dissmiss a UISearchBar with an SearchBarController
    nginx server_name
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4100314.html
Copyright © 2011-2022 走看看