用vue+node+socket.io實現(xiàn)一個最簡單的IM

github地址在這里??

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)最簡單的聊天功能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容