express + socket.io實現超簡易聊天室
阿新 • • 發佈:2018-12-06
什麼是socket.io
socket.io是webSocket的一個封裝元件,實現雙向通訊,可以用這個來實現聊天室功能、線上小遊戲等等,是個有趣好玩的東西,博主就喜歡搗鼓這些
實現聊天室思路
聊天室就是要聊天嘛,就像打電話一樣,我這邊說話你那邊應該要馬上聽到,所以就需要用到雙向通訊,瀏覽器發出一條資訊比如是一個字串'message',服務端接收然後立馬將它傳送出去給需要接收的瀏覽器
首先下載express和socket.io的依賴包
cnpm install --save express
cnpm install --save socket.io
前端程式碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.chat{
width: 300px;
height: 500px;
text-align: center;
margin: 0 auto;
border: 1px solid #ccc;
}
.message {
width: 100%;
height: 460px;
}
</style>
</head>
<body>
<div class="chat">
<div class="message"></div>
<input id="text" type="text" placeholder="請輸入聊天資訊">
<button onclick="chat()">傳送資訊</button >
</div>
<script src="/socket.io/socket.io.js"></script>
<script>
var message = document.getElementsByClassName('message')[0]
var socket = io.connect('http://localhost:1234');
//從服務端接收資料
socket.on('message',function (data) {
message.innerHTML += data + '<br>';
})
function chat(){
var text = document.getElementById('text').value
//向服務端傳送資料
socket.emit('message', {message:text});
}
</script>
</body>
</html>
node程式碼
var express = require('express')
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
//提供靜態檔案服務
app.use(express.static(__dirname));
io.on('connection', function (socket) {
socket.on('message', function (data) {
//服務端像所以也沒傳送資料
io.sockets.emit('message', data.message);
});
});
server.listen(1234,function () {
console.log('連線成功');
})
幾個要點稍微提一下首先是前端引入js檔案時候
<script src="/socket.io/socket.io.js"></script>
可能你會疑惑本地沒有這個檔案,但其實你在服務端執行你的html時候它就會自動生成所以不用擔心直接這樣引入就行啦
關於傳送接收資訊
socket.emit()//傳送
socket.on()//接收
io.sockets.emit()//只要服務端這樣哦,像所有連線server的傳送就像廣播了
最後執行node,開啟兩個對應埠的html,結果為
如果有哪裡說的不對或者不好還請見諒!謝謝!