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