})
运行后打印
connect
disconnect 客户端代码
let socket = io('http://localhost:3000')
socket.on('connect', () => {
console.log('connect')
})
socket.on('disconnect', () => {
console.log('disconnect')
})运行后打印
connect
disconnect 传输数据
服务器与客户端的socket是一个关联的EventEmitter对象,客户端socket派发的事件可以通以被服务端的socket接收,服务器端socket派发的事件也可以被客户端接受。基于这种机制,可以实现双向交流。
现在模拟这样一种情况:客户端不停发送随机数,当随机数大于0.95时,服务端延时1s后向客户端发送警告以及警告次数
服务端代码
let server = require('http').Server()
let io = require('socket.io')(server)server.listen(3000);
io.on('connection', socket => {
socket.on('random', value => {
console.log(value)
if (value > 0.95) {
if (typeof socket.warning === 'undefined') socket.warning = 0
setTimeout(() => {
socket.emit('warn', ++socket.warning)
}, 1000)
}
})
})
socket对象可以用来存储状态信息和自定义数据,如
socket.warning客户端代码
let socket = io('http://localhost:3000')
let interval = setInterval(() => {
socket.emit('random', Math.random())
}, 500)
socket.on('warn', count => {
console.log('warning count: ' + count)
})
socket.on('disconnect', () => {
clearInterval(interval)
})传输流
socket.io可以处理流
服务端代码
io.on('connection', function (socket) {
let stream = ss.createStream()
ss(socket).emit('script', stream)
fs.createReadStream(__filename).pipe(stream)
})客户端代码
let socket = io('http://localhost:3000')
ss(socket).on('script', stream => {
let buffer = ''
stream.on('data', data => {
buffer += data.toString()
})
stream.on('end', () => {
console.log(buffer)
})
})总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对软件开发网的支持。









