一.要點(diǎn)分析
(1) 對于socket.io,它是基于事件響應(yīng)的socket,可以進(jìn)行長時間的消息傳遞。其服務(wù)端使用的方法主要不過就是兩個,on()和emit()
io.on("connetcion",function(socket) { socket.on("event",function(data) { /*執(zhí)行相應(yīng)的方法*/ //通知客戶端執(zhí)行事件 socket.emit("new event",{data:"mydata"}); }); });
(2)搭建好服務(wù)器端后就進(jìn)行客戶端連接
//引入socket var socket = io(); socket.on("event",function(data) { /*執(zhí)行事件*/ //通知服務(wù)器端執(zhí)行事件 socket.emit("new event",{data:"mydata"}); });
(3)接下來就是對視圖的搭建
二.源代碼和注釋分析(1) app.js:
//引入express框架 var express = require("express"); var app = express(); //服務(wù)端創(chuàng)建 var server = require("http").createServer(app); //使用socket.io進(jìn)行通信 var io = require("socket.io")(server); var port = process.env.POST || 8000; //服務(wù)開啟 server.listen(port,function() { console.log("The chatting room is running at port: " + port); }); //使用靜態(tài)文件目錄 app.use(express.static(__dirname + "/public")); //當(dāng)前進(jìn)入聊天室的人數(shù) var usersNumber = 0; //客戶端通過socket鏈接服務(wù)端 io.on("connection",function(socket) { //默認(rèn)沒有用戶進(jìn)入 var addUser = false; //客戶端發(fā)送新的消息 socket.on("new message",function(data) { //廣播所有在線客戶端新消息的產(chǎn)生 socket.broadcast.emit("new message",{ userName: socket.userName, message: data }); }); //客戶端發(fā)送有用戶加入的消息 socket.on("add user",function(userName) { if(addUser) return; socket.userName = userName; usersNumber++; addUser=true; //向客戶端發(fā)送登陸成功 socket.emit("login",{ userName: socket.userName, usersNumber:usersNumber }); //廣播有新用戶加入 socket.broadcast.emit("new user join",{ userName:socket.userName, usersNumber:usersNumber }); }); //客戶端斷開鏈接 socket.on("disconnect",function() { if(addUser) { usersNumber--; //通知所有客戶端有用戶離開 socket.broadcast.emit("user left",{ userName:socket.userName, usersNumber:usersNumber }); } }); });
(2) main.js:
$(function(){ //創(chuàng)建socket與服務(wù)端鏈接 var socket = io(); //通過jquery獲取dom節(jié)點(diǎn) var $logPage = $(".logPage"); var $logList = $(".logList"); var $chatPage = $(".chatPage"); var $messageContent = $(".messageContent"); var $messageList = $(".messageList"); var $messageInput = $(".messageInput"); var $usernameInput = $(".usernameInput"); var $sendMessage = $(".sendMessage"); var $addUser = $(".addUser"); var $loginPage = $(".loginPage"); var $messageInputBar = $(".messageInputBar"); //默認(rèn)當(dāng)前登陸輸入框?yàn)榻裹c(diǎn)狀態(tài) var $currentInput = $usernameInput.focus(); //用于記錄當(dāng)前的用戶名 var userName; var connect = false; //監(jiān)聽服務(wù)器是否有新的消息產(chǎn)生,有的話就顯示消息到列表 socket.on("new message",function(data) { //在列表框中添加消息,類型為收取的消息 addNewMessage(data,2); }); //監(jiān)聽服務(wù)器是否登陸成功,成功就顯示成功登陸 socket.on("login",function(data) { userLogin(data); }); //監(jiān)聽服務(wù)器是否有新的用戶加入,有的話就顯示 socket.on("new user join",function(data) { newUserJoin(data); }); //監(jiān)聽服務(wù)器是否有用戶離開 socket.on("user left",function(data){ userLeft(data); }); function userLogin(data) { //登陸成功,輸出信息 connect = true; $logList.empty(); $logList.append("
Name: " + data.userName + " is joined
CurrentNumber: " + data.usersNumber + "
Name: " + data.userName + " is joined
CurrentNumber: " + data.usersNumber + "
User: " + data.userName + " has left
CurrentNumber: " + data.usersNumber + "
(3) index.html:
Chatting Room
Please input your nameLogin
(4) 使用aui視圖框架
github倉庫鏈接
聊天室鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/80694.html
摘要:最近練手開發(fā)了一個項(xiàng)目,是一個聊天室應(yīng)用。由于我們的項(xiàng)目是一個單頁面應(yīng)用,因此只需要統(tǒng)一打包出一個和一個。而就是基于實(shí)現(xiàn)的一套基于事件訂閱與發(fā)布的通信庫。比如說,某一個端口了,而如果端口訂閱了,那么在端,對應(yīng)的回調(diào)函數(shù)就會被執(zhí)行。 最近練手開發(fā)了一個項(xiàng)目,是一個聊天室應(yīng)用。項(xiàng)目雖不大,但是使用到了react, react-router, redux, socket.io,后端開發(fā)使用了...
摘要:項(xiàng)目簡介主要是通過做一個多人在線多房間群聊的小項(xiàng)目來練手全棧技術(shù)的結(jié)合運(yùn)用。編譯運(yùn)行開啟服務(wù),新建命令行窗口啟動服務(wù)端,新建命令行窗口啟動前端頁面然后在瀏覽器多個窗口打開,注冊不同賬號并登錄即可進(jìn)行多用戶多房間在線聊天。 項(xiàng)目簡介 主要是通過做一個多人在線多房間群聊的小項(xiàng)目、來練手全棧技術(shù)的結(jié)合運(yùn)用。 項(xiàng)目源碼:chat-vue-node 主要技術(shù): vue2全家桶 + socket....
摘要:前端邏輯搞定之后,思考一下這個聊天室的交互是怎么實(shí)現(xiàn)的。在前端監(jiān)聽一個事件,這個事件的觸發(fā)條件是成功和服務(wù)端建立連接。攜帶一個參數(shù),即用戶的輸入。別人發(fā)送的消息現(xiàn)在就需要在前端建立一個響應(yīng)服務(wù)端有新消息的監(jiān)聽事件了。 一些廢話:) 最近在學(xué)校比較閑,終于有這么一塊時間可以自由支配了,所以內(nèi)心還是十分的酸爽舒暢的。當(dāng)然了,罪惡的事情也是有的,比如已經(jīng)連續(xù)一周沒有吃早飯了,其實(shí)現(xiàn)在回頭想想...
摘要:前端邏輯搞定之后,思考一下這個聊天室的交互是怎么實(shí)現(xiàn)的。在前端監(jiān)聽一個事件,這個事件的觸發(fā)條件是成功和服務(wù)端建立連接。攜帶一個參數(shù),即用戶的輸入。別人發(fā)送的消息現(xiàn)在就需要在前端建立一個響應(yīng)服務(wù)端有新消息的監(jiān)聽事件了。 一些廢話:) 最近在學(xué)校比較閑,終于有這么一塊時間可以自由支配了,所以內(nèi)心還是十分的酸爽舒暢的。當(dāng)然了,罪惡的事情也是有的,比如已經(jīng)連續(xù)一周沒有吃早飯了,其實(shí)現(xiàn)在回頭想想...
閱讀 2907·2021-09-10 10:50
閱讀 2231·2019-08-29 16:06
閱讀 3254·2019-08-29 11:02
閱讀 1143·2019-08-26 14:04
閱讀 2856·2019-08-26 13:24
閱讀 2372·2019-08-26 12:16
閱讀 604·2019-08-26 10:29
閱讀 3148·2019-08-23 18:33