socket会话

socket业务逻辑

 

服务端逻辑
1、引入net模块创建一个服务端,因为net模块时持久性连接,http模块时非持久性连接
2、创建一个新的服务器,建立端口号
3、用connection方法将用户链接进来,之前要先定义一个数组用于接收用户,设置好用户的id便于之后用户断开连接停止发送信息给该用户,push方法添加用户
4、使用client.on里面的data方法接收用户传递过来的消息,用map循环遍历用户所在的数组,如果存在就传递消息
5、当用户断开连接时,将用户id清除


客户端逻辑
1、引入一个net模块
2、引入readline文件读写流 可以在终端进行文件的读写
3、创建服务端
4、通过readline。createface创建文件的输入输出
5、客户端通过connect进行连接服务端,里面三个参数分别是端口号,ip地址,和回调,会调离用来接收服务端传递过来的消息
6、使用line方法进行文件的接收,通过client.write发送消息

 

 

服务端

//服务端 server.js
const net = require("net")//持久性连接  所以用net模块  http 模块非持久性连接
const server = net.createServer();
server.listen(9000);

const clients = []
//当用户连接到服务器以后 要做的事情
server.on("connection",(client)=>{
    //将所有的客户端保存在一个数组中,当收到消息的时候将这个消息给所有用户发送过去
    client.id = client.length;
    clients.push(client);
    console.log("有人连接进来了");
    
    //接收客户端传递过来的消息
    client.on("data",(data)=>{
        //console.log(data+"")
        //然后将这个消息发送给所有的用户
        clients.map((item)=>{
            if(item){
                item.write(data);
            }
        })
    })
    //当客户端断开连接的时候,将他从数组中移除
    client.on("close",()=>{
         clients[client.id]=null
    })
   
})

  客户端

//客户端  client.js
const net = require("net");
const readline = require("readline");//创建文件读写流  可以在终端上进行文件的书写
const client = new net.Socket();

const rl = readline.createInterface({
    input:process.stdin,
    output:proess.stdout
})
//将buffer文件转换为文字符
client.setEncoding("utf8")

//客户端使用connect方法连接服务器  参数1: 端口号  参数2 IP地址
client.connect(9000,"127.0.0.1",()=>{
    //client.write("123");
    //接收服务端传递过来的消息
    client.on("data",(data)=>{
        console.log(data)
    })
});
//让我们在终端上进行文件的读写
rl.on("line",(text)=>{
    //发送消息
    client.write(text);
})

  

posted @ 2019-08-01 09:46  zZindex  阅读(393)  评论(0编辑  收藏  举报