基於websocket與nodejs-websocket的簡單聊天室
1.專案目錄:
- websocketChatRoom
- index.html(客戶端)
- wsServer.js(伺服器)
2.安裝nodejs-websocket(https://www.npmjs.com/package/nodejs-websocket)
- npm install nodejs-websocket
3.index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>websocket聊天室</title>
</head>
<body>
<input id="sendTxt" type="text">
<button id="send">send</button>
<script type="text/javascript">
var websocket = new WebSocket("ws://localhost:3000/");
websocket.onopen = function() {
console.log("websocket open");
// 傳送訊息放在這裡
document.getElementById("send").onclick = function() {
var txt = document.getElementById("sendTxt").value;
if (txt) {
websocket.send(txt);
}
}
}
websocket.onclose = function() {
console.log("websocket close");
}
// 只接收字串引數,所以在服務端相傳物件過來可以用JSON先轉換成字串,然後在這邊轉成物件
websocket.onmessage = function(e) {
console.log(e.data);
var mes = JSON.parse(e.data);
showMessage(mes.data, mes.type);
}
// 顯示訊息函式
function showMessage(str, type) {
var div = document.createElement('div');
if (type == "enter") {
div.style.color = "red";
} else if (type == "message") {
div.style.color = "blue";
} else if (type == "leave") {
div.style.color = "green";
}
div.innerHTML = str;
document.body.appendChild(div);
}
</script>
</body>
</html>
4.wsServer.js
var ws = require("nodejs-websocket")
const PORT = 3000;
// 每進來一個客戶端就記錄一下
var clientCount = 0;
var server = ws.createServer(function(conn) {
console.log("New connection")
clientCount++;
conn.nickname = 'user' + clientCount;
let mes = {};
mes.type = "enter";
mes.data = conn.nickname + ' comes in'
broadcast(JSON.stringify(mes));
conn.on("text", function(str) {
console.log("Received " + str);
let mes = {};
mes.type = "message";
mes.data = conn.nickname + ' says: ' + str;
broadcast(JSON.stringify(mes));
})
conn.on("close", function(code, reason) {
console.log("Connection closed");
let mes = {};
mes.type = "leave";
mes.data = conn.nickname + ' left'
broadcast(JSON.stringify(mes));
})
conn.on("error", function(err) {
console.log("handle err");
console.log(err);
})
}).listen(PORT);
console.log("websocket server running on port: " + PORT);
function broadcast(str) {
server.connections.forEach(function(connection) {
connection.sendText(str);
})
}
5.執行結果
6.注意
- index.html裡的onmessage回撥函式要接收字串作為引數,所以在服務端要用JSON轉換成字串,然後再在客戶端轉成物件!
- 這裡的實現過程都是自己寫的,可以藉助socket.io來實現,它可以傳送任何型別的資料,不僅僅是字串,而且可以自定義事件
相關文章
- 基於webapi的websocket聊天室(四)WebAPI
- 基於websocket的簡單廣播系統Web
- 基於webapi的websocket聊天室(番外二)WebAPI
- 基於webapi的websocket聊天室(番外一)WebAPI
- 基於 golang + vue + websocket 開發的聊天室GolangVueWeb
- 基於 flask 結合 Redis 的簡單聊天室FlaskRedis
- 用Java構建一個簡單的WebSocket聊天室JavaWeb
- SpringBoot2 整合 WebSocket 簡單實現聊天室功能Spring BootWeb
- 用node實現一個簡單的聊天室——websocket實踐Web
- 基於 WebSocket 的 PPT 遠端控制器簡單實現Web
- 基於Websocket的簡易webshell實現Webshell
- 簡單的websocket demoWeb
- 用nodejs-websocket開發一個websoket服務NodeJSWeb
- 簡單聊聊WebSocketWeb
- 基於netty的聊天室Netty
- 基於golang的聊天室Golang
- Python基於Socket實現簡易多人聊天室Python
- WebSocket於HTTP 、WebSocket與Socket的區別WebHTTP
- WebSocket 簡單瞭解Web
- Netty版本 簡單聊天室Netty
- 簡單寫個聊天室
- WebSocket就是這麼簡單Web
- 基於Netty實現的WebSocket聊天室--支援多人同時線上及定時心跳檢測NettyWeb
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠
- 簡單的 swoole 聊天室 (持續更新、完善)
- 分享一個簡單的聊天室專案
- 基於Opencv的簡單影像處理OpenCV
- WinForm的Socket實現簡單的聊天室 IMORM
- Java斷點續傳(基於socket與RandomAccessFile的簡單實現)Java斷點randomMac
- 微信小程式websocket聊天室微信小程式Web
- SignalR簡版web聊天室(demo簡單演示篇)SignalRWeb
- Websocket 直播間聊天室教程 - GoEasy 快速實現聊天室WebGo
- 基於SSM框架的簡單問答社群SSM框架
- 基於mpvue的簡單彈窗元件mptoastVue元件AST
- 一個最簡單的WebSocket hello world demoWeb
- C++ 實現基於TCP的聊天室C++TCP
- 基於 ThinkJS 的 WebSocket 通訊詳解JSWeb
- iOS 基於FMDB簡單封裝iOS封裝