利用Socket做一个简单的群聊
用node做群聊的过程没有java那么复杂,它是单线程,服务器和客户端也是一对多的关系,当客户端把数据发送给服务器的时候,服务器接收到数据,然后将数据进行转发即可。
一、服务器端
在node里面创建服务器分为三个步骤,分别是:
1、引入net模块
let net=require("net");
2、利用net创建服务器
let sk=net.createServer(function(socket){
//服务器要进行的操作
});
3、启动服务器
sk.listen("9090",function(err){
if(err) console.log("端口被占用!");
console.log("服务器启动成功!");
});
做完这三步以后的核心就是服务器如何对数据进行转发。其实原理也很简单,每当有一个客户端进来的时候,就会创建一个socket,所以我们只需要将创建的socket用一个容器存起来就可以,然后将数据发送给每一个socket即可。(这里的容器我用的是数组)
socketlist[socketlist.length]=socket;
console.log("有"+socketlist.length+"个客户端连接上了");
//给客户端发送一段文字
socket.write("welcome to chat room!\r\n");
socket.write("please input your name:");
// 服务器端接收客户端发来的数据
let username = "",msg = "",flag=true;
socket.on("data",function(chunk){
if(flag){
username=chunk.toString().trim();
flag=!flag;
}else{
console.log("username:"+chunk.toString().trim());
//转发出去,给其他每一个客户端都转发一次,存到数组里面
for(var i=0;i<socketlist.length;i++){
socketlist[i].write(username+" say:"+chunk.toString().trim());
}
}
});
读取数据:
socket.on();
写数据:
socket.write(要发送的数据);
二、客户端
客户端的代码其实很简单,就发送数据和接收数据。它也分为三步:
1、引入net模块
let net=require("net");
2、与服务器建立连接,提供端口和ip地址,并通过回调函数确认链接结果
let socket=net.connect({port:"9090",host:"localhost"},function(err){
if(err) throw err;
//接收数据
socket.on("data",function(chunk){
console.log(chunk.toString().trim());
});
//发送数据
process.stdin.on("data",function(chunk){
socket.write(chunk);
});
});
测试: