一.要點(diǎn)分析
(1) 對(duì)于socket.io,它是基于事件響應(yīng)的socket,可以進(jìn)行長(zhǎng)時(shí)間的消息傳遞。其服務(wù)端使用的方法主要不過(guò)就是兩個(gè),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)接下來(lái)就是對(duì)視圖的搭建
二.源代碼和注釋分析(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ù)開(kāi)啟 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; //客戶端通過(guò)socket鏈接服務(wù)端 io.on("connection",function(socket) { //默認(rèn)沒(méi)有用戶進(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 }); }); //客戶端斷開(kāi)鏈接 socket.on("disconnect",function() { if(addUser) { usersNumber--; //通知所有客戶端有用戶離開(kāi) socket.broadcast.emit("user left",{ userName:socket.userName, usersNumber:usersNumber }); } }); });
(2) main.js:
$(function(){ //創(chuàng)建socket與服務(wù)端鏈接 var socket = io(); //通過(guò)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)聽(tīng)服務(wù)器是否有新的消息產(chǎn)生,有的話就顯示消息到列表 socket.on("new message",function(data) { //在列表框中添加消息,類(lèi)型為收取的消息 addNewMessage(data,2); }); //監(jiān)聽(tīng)服務(wù)器是否登陸成功,成功就顯示成功登陸 socket.on("login",function(data) { userLogin(data); }); //監(jiān)聽(tīng)服務(wù)器是否有新的用戶加入,有的話就顯示 socket.on("new user join",function(data) { newUserJoin(data); }); //監(jiān)聽(tīng)服務(wù)器是否有用戶離開(kāi) 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倉(cāng)庫(kù)鏈接
聊天室鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80694.html
摘要:最近練手開(kāi)發(fā)了一個(gè)項(xiàng)目,是一個(gè)聊天室應(yīng)用。由于我們的項(xiàng)目是一個(gè)單頁(yè)面應(yīng)用,因此只需要統(tǒng)一打包出一個(gè)和一個(gè)。而就是基于實(shí)現(xiàn)的一套基于事件訂閱與發(fā)布的通信庫(kù)。比如說(shuō),某一個(gè)端口了,而如果端口訂閱了,那么在端,對(duì)應(yīng)的回調(diào)函數(shù)就會(huì)被執(zhí)行。 最近練手開(kāi)發(fā)了一個(gè)項(xiàng)目,是一個(gè)聊天室應(yīng)用。項(xiàng)目雖不大,但是使用到了react, react-router, redux, socket.io,后端開(kāi)發(fā)使用了...
摘要:項(xiàng)目簡(jiǎn)介主要是通過(guò)做一個(gè)多人在線多房間群聊的小項(xiàng)目來(lái)練手全棧技術(shù)的結(jié)合運(yùn)用。編譯運(yùn)行開(kāi)啟服務(wù),新建命令行窗口啟動(dòng)服務(wù)端,新建命令行窗口啟動(dòng)前端頁(yè)面然后在瀏覽器多個(gè)窗口打開(kāi),注冊(cè)不同賬號(hào)并登錄即可進(jìn)行多用戶多房間在線聊天。 項(xiàng)目簡(jiǎn)介 主要是通過(guò)做一個(gè)多人在線多房間群聊的小項(xiàng)目、來(lái)練手全棧技術(shù)的結(jié)合運(yùn)用。 項(xiàng)目源碼:chat-vue-node 主要技術(shù): vue2全家桶 + socket....
摘要:前端邏輯搞定之后,思考一下這個(gè)聊天室的交互是怎么實(shí)現(xiàn)的。在前端監(jiān)聽(tīng)一個(gè)事件,這個(gè)事件的觸發(fā)條件是成功和服務(wù)端建立連接。攜帶一個(gè)參數(shù),即用戶的輸入。別人發(fā)送的消息現(xiàn)在就需要在前端建立一個(gè)響應(yīng)服務(wù)端有新消息的監(jiān)聽(tīng)事件了。 一些廢話:) 最近在學(xué)校比較閑,終于有這么一塊時(shí)間可以自由支配了,所以內(nèi)心還是十分的酸爽舒暢的。當(dāng)然了,罪惡的事情也是有的,比如已經(jīng)連續(xù)一周沒(méi)有吃早飯了,其實(shí)現(xiàn)在回頭想想...
摘要:前端邏輯搞定之后,思考一下這個(gè)聊天室的交互是怎么實(shí)現(xiàn)的。在前端監(jiān)聽(tīng)一個(gè)事件,這個(gè)事件的觸發(fā)條件是成功和服務(wù)端建立連接。攜帶一個(gè)參數(shù),即用戶的輸入。別人發(fā)送的消息現(xiàn)在就需要在前端建立一個(gè)響應(yīng)服務(wù)端有新消息的監(jiān)聽(tīng)事件了。 一些廢話:) 最近在學(xué)校比較閑,終于有這么一塊時(shí)間可以自由支配了,所以內(nèi)心還是十分的酸爽舒暢的。當(dāng)然了,罪惡的事情也是有的,比如已經(jīng)連續(xù)一周沒(méi)有吃早飯了,其實(shí)現(xiàn)在回頭想想...
閱讀 2846·2021-09-10 10:50
閱讀 2201·2019-08-29 16:06
閱讀 3206·2019-08-29 11:02
閱讀 1104·2019-08-26 14:04
閱讀 2821·2019-08-26 13:24
閱讀 2314·2019-08-26 12:16
閱讀 561·2019-08-26 10:29
閱讀 3106·2019-08-23 18:33