scoket
首先介紹一下socket的基本知識:socket 原意是“插口”,在網(wǎng)絡(luò)中每臺服務(wù)器相當(dāng)于一間房子,房子中有著不同的插口,每個插口都有一個編號,且負(fù)責(zé)某個功能。例如充電插口、網(wǎng)線插口、電話插口等。也就是說,使用不同的插口連接到對應(yīng)的插口,就可以獲得對應(yīng)的服務(wù)。其實,插口就是 socket 服務(wù),插口的編號就是端口號,而插頭也是一個 socket 服務(wù)。
所以,socket 的含義就是兩個應(yīng)用程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,連接的一段就是一個 socket,又稱為套接字。實現(xiàn)一個 socket 連接通信至少需要兩個套接字,一個運行在服務(wù)端(插孔),一個運行在客戶端(插頭)。
socket.io
socket.io是一個實現(xiàn)實時web通信的JavaScript庫。它包含兩部分,在瀏覽器上運行的客戶端庫和在nodejs上運行的服務(wù)器端庫。
實現(xiàn)一個小??栗子
首先請先保證node環(huán)境,再安裝以下
npm i express
npm i socket.io
服務(wù)端: index.js
var app = require('express')()
var http = require('http').Server(app)
var io = require('socket.io')(http)
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html')
})
io.on('connection', (socket) => {
console.log('a user connected')
//響應(yīng)某用戶發(fā)送消息
socket.on('chat message', (msg) => {
console.log('chat message:' + msg)
// 廣播給所有人
io.emit('chat message', msg)
})
socket.on('disconnect', () => {
console.log('user disconnected')
})
})
// 監(jiān)聽3000端口
http.listen(3000, () => {
console.log('listening on *:3000')
})
客戶端: index.html
methods: {
// 發(fā)送消息
send () {
this.socket.emit("chat message", this.message)
this.message = ''
}
},
mounted () {
// 接收消息
this.socket.on("chat message", (msg) => {
this.list.push(msg)
})
運行
node index.js
打開多個localhost:3000窗口,發(fā)的消息都可以收到,并且沒有延遲。能夠?qū)崿F(xiàn)最簡單的聊天功能。