您可以通过左右滑屏查看更多笔记内容。。

Nodejs视频

29 Jul 2019 . category: tech .
更多笔记

NodeJs-视频知识-02

二.服务器与客户端的连接与沟通

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

实现功能:

  • 实现多个客户端连接服务器后,客户端给服务器发送的消息可以广播到所有的客户端
  • 当解决问题:一个客户端断开,再发送广播会报错

服务器:

var net=require('net');
var clientList=[];
var server=net.createServer(function(socket){
	//当有客户端进行链接时,就进入这个方法,并且告知客户端,连接诶成功:
    socket.write('客户端连接服务器成功:success!\r\n');
    //socket.pipe(socket);
    //data 就是接收的客户端传输来的内容
    socket.on('data',function(data){
        console.log("客户端说:"+data.toString());
        //socket.write("我是服务器----");将固定的输出内容改为,接收的客户端发来的内容,病广播给所有连接本服务器的客户端
         broadcast(data);
    });
    //没有写socket.end();的话不会自动结束,除非报错,会自动调用end();
    socket.on('end',function () {
    	//当有一个客户端中断连接之后,为了不报错,需要删除这个socket
         var index=clientList.indexOf(socket);//查找这个Socket在数组中的下标
         clientList.splice(index,1);//删除数组中的数据
        // socket.write('end');//必须注释掉,不然会报错;
    });
});
//每当接收到客户端发来的消息时,就进行广播,所有连接这个服务器的客户端都会收到这条消息
function broadcast(data){
    for(var i=0;i<clientList.length;i++){
        clientList[i].write(data);
    }
}
server.listen(2222,'127.0.0.1');

客户端

  • host:自定义IP地址;
  • port:自定义端口号;
var net=require('net');
var hostname=process.argv[2];//补充学习中讲解
var port=process.argv[3];
var client =net.connect({host:hostname,port:port},function(){
    console.log('connected to server');
    //连接服务器成功,就发送给服务器一条消息,我是客户端;
    //client.write('我是客户端\r\n');
    //将上边的固定输出内容更改为用户自动输入,并将用户输入的内容发送给服务器;
    //设置编码格式,用户可以输入中文;
    process.stdin.setEncoding("utf8");
    //当有键盘输入时,触发这个事件
    process.stdin.on('readable',function(){
        //读取数据
        var chunk=process.stdin.read();
        if(chunk!=null){
            //将输入返回给服务器;
            client.write('data:'+chunk);
        }
    })
});
client.on('data',function(data){
	//将接收到的服务器发来的消息打印出来;
    console.log("服务器说:"+data.toString());
    //client.end();
});
//如果连接服务器后中间出现问题,即使没有调用end(),也会自动触发这个函数;
client.on('end',function () {
    console.log('disconnected from server');
});

indexOf()方法使用;

  • 数组中indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

    • 语法 stringObject.indexOf(searchvalue,fromindex)

    • 参数 描述

      • searchvalue 必需。规定需检索的字符串值。
      • fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0到 - 1。如省略该参数,则将从字符串的首字符开始检索。IndexOf的使用:
      • img

splice()方法的使用:

注释:**该方法会改变原始数组。

语法

arrayObject.splice(index,howmany,item1,.....,itemX)
参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, …, itemX 可选。向数组添加的新项目。

返回值

类型 描述
Array 包含被删除项目的新数组,如果有的话。

说明

splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。

如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。


补充学习

Process.argv的补充内容

process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。 因为是全局变量,所以无需使用 require()。

process.argv 属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数,

其中:

  • 数组的第一个元素process.argv[0]——返回启动Node.js进程的可执行文件所在的绝对路径;

  • 第二个元素process.argv[1]——为当前执行的JavaScript文件路径

  • 剩余的元素为其他命令行参数;