Socket
Node-Socket
- 先搭建服务端server.js,引入net模块
- 创建服务器 const server = net.createServer(), 然后监听服务器server.listen(PORT)
- 连接客户端 server.on(‘connection’,( ) => { })
- 通过计数器来给每一个客户端命名来区分
- 使用data事件用来将客户端的信息展示到服务端
- 搭建客户端,使用const socket = new net.Socket() 连接客户端与服务端。
- 开始连接: socket.connect(PORT,HOST,() => {
socket.write(‘我上线了’) // write 是发送给服务端的话
})
- 使用data事件可以将客户端发来的信息展示到客户端。
- 客户端需要在终端能够打字才能发信息过来,所以在客户端引入模块readline(用法在nodejs官网)
- 将这个方法封装成一个函数,放到data事件中就可以多次发送了。
- 在服务端创建一个广播,展示客户端的信息。 使用for in 遍历客户端对象。然后把函数放入data事件。
- 判断输入词设置下线功能,中断socket和rl。在服务端监听close事件。
13.释放服务端的对象内存delete clients[client.name] - 为了防止客户端下线服务端崩溃,处理把错误做成输出,而不是抛出异常程序中断。客户端也要监听异常行为。
//服务端代码
const net = require( 'net' );
const PORT = 5000
let count = 0 // 用于做编号
const clients = {} // 这个是用于保存客户端的
//创建服务器
const server = net.createServer() ;
server.on('connection',( client ) => { //socket 就是客户端
// 触发条件: 只要有客户端连接服务器就会自动触发
client.name = ++count
clients[ client.name ] = client
client.on('data',( msg ) => { //data事件是用来将客户端的信息展示到服务端
console.log( `客户端${ client.name }说: ${ msg.toString() }` )
boardCast( msg.toString() )
})
client.on('error',( error ) => {
console.log( error )
})
client.on('close',() => {
console.log(`客户端${ client.name }下线了`)
delete clients[ client.name ]
})
});
// 广播boardCast 将客户端发来的信息全数展示在服务端
function boardCast ( msg ) {
for ( var key in clients ) {
clients[ key ].write( `客户端${ key }说:${ msg }` )
}
}
// 3. 监听服务器
server.listen( PORT )
/*
客户端
*/
const net = require( 'net' )
// 做的是终端读取一行信息
const readline = require( 'readline' )
const socket = new net.Socket() // socket是用于连接客户端和服务端
const PORT = 5000
const HOST = '127.0.0.1'
socket.connect(PORT,HOST,() => {
socket.write('我上线了') // write 是发送给服务端的话
})
socket.on('data',msg => {
// 停留一下
console.log( msg.toString() )
say()
})
socket.on('error',() => {
console.log( error )
})
socket.on('close',() => {
console.log( '下线了')
})
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function say () {
rl.question('请输入:', (answer) => {
// TODO:将答案记录在数据库中。
if( answer === '886' ) {
socket.destroy()
rl.close()
} else {
socket.write( answer )
}
});
}
H5的socekt通信
- 服务端 【socket的服务端】
- 客户端
- html文件
- 服务器【只是静态服务器用来展示html5文件】
- 先初始化npm,然后安装express搭建服务器。
- 通过express创建静态服务器
- 引入模块,搭建路由
- 声明静态资源文件夹app.use(express.static(磁盘路径))
- 创建通信的服务端scoketServer.js,需要下载引入ws模块(ws是H5的一个通信协议)
- 使用这个模块创建服务器
- 创建计数器和储存客户端的对象
- 写客户端连接事件
- 处理客户端发来的信息
- 服务端写好之后打造自己的客户端,在客户端里面写
- 使用H5提供的WebScoket模块。
- ws.onopen()发送信息