一、理解socket
socket是client和server进行连接,消息传送的桥梁;
二、 node中server的socket
node通过net.createServer((socket) => {})创建server,其中回调函数的参数为socket,建立连接后即可使用socket;
const net = require('net');
//创建一个socket服务器
const server = net.createServer((socket) => {
// 建立连接后触发以下程序
console.log('建立连接');
socket.write('hello client');
socket.on('data', (data) => {
console.log(data.toString());
})
socket.on('end', () => {
console.log('连接中断');
})
});
server.on('error', (err) => {
throw err;
})
server.listen(2080, '127.0.0.1', () => {
console.log('server监听成功');
})
三、node中client的socket
client通过net.createConnection({port: 2080, host: ‘127.0.0.1’}, () => {});创建client,这个client就是socket
const net = require('net');
const client = net.createConnection({port: 2080, host: '127.0.0.1'}, () => {
// 客户端创建连接之后触发
console.log('客户端连接成功');
// 通过socket给server发送消息
client.write('hello server');
})
client.on('data', (data) => {
// 通过socket接受server的消息
console.log(data.toString());
client.end();
})
client.on('end', () => {
console.log('连接中断');
})
四、在shell中使用
五、server端进行广播(http协议雏形)
思路:1、定义数据格式,利用json字符串进行传递;
对于多个客户端,用数组sockets剩放所有client连接;
在server.js中:
const net = require('net');
//存储所有连接的client
const sockets = [];
// 创建一个socket服务器
const server = net.createServer((socket) => {
sockets.push(socket);
function boardcast(from, message){
sockets.forEach((element) => {
element.write(`你好呀${from}, 你说的是${message}`);
});
}
socket.on('data', (chunk) => {
//规定chunk的数据结构为: {portocal: 'boardcast', from: 'client', message: 'hello'}
try {
var data = JSON.parse(chunk);
switch(data.portocal){
case 'boardcast':
console.log('收到消息');
boardcast(data.from, data.message);// 有任何客户端发消息都会有触发,对每个client进行广播
break;
default: socket.write('你说的格式我不识别');
}
} catch (error) {
console.log(error);
}
})
});
const port = 2080;
// 监听一个特定的端口
server.listen(port, (err) => {
// 监听端口成功后调用,如果监听失败则是端口被调用
if (err){
console.log('端口被占用');
return false;
}
console.log(`server成功监听${port}`);
})
在client.js中
const net = require('net');
const signal = {"portocal": "boardcast", "from": "jinghong", "message": "hello"};
const client = net.createConnection({port: 2080, host: '127.0.0.1'}, () => {
console.log('client已经连接');
client.write(JSON.stringify(signal));
});
client.on('data', (data) => {
console.log(data.toString());
})
client.on('end', () => {
console.log('连接关闭');
})
运行测试:打开一个终端运行server.js;多个终端运行client;