国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

socket.io實現在線聊天頁面

Gemini / 2037人閱讀

一.要點分析

(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

  • "); $logList.append("
  • CurrentNumber: " + data.usersNumber + "

  • "); } function addNewMessage(data,state) { if(state == 1) { $messageList.append( "
    " + data.userName +"
    "+data.message+"
    "); }else { $messageList.append( "
    " + data.userName +"
    "+data.message+"
    "); } } function newUserJoin(data) { $logList.empty(); $logList.append("
  • Name: " + data.userName + " is joined

  • "); $logList.append("
  • CurrentNumber: " + data.usersNumber + "

  • "); } function userLeft(data) { $logList.empty(); $logList.append("
  • User: " + data.userName + " has left

  • "); $logList.append("
  • CurrentNumber: " + data.usersNumber + "

  • "); } //當用戶點擊發送消息時的事件 $sendMessage.click(function(event) { /* Act on the event */ var message = $messageInput.val(); if (message && connect) { $messageInput.val(""); addNewMessage({ userName: userName, message: message },1); socket.emit("new message", message); } }); //當用戶點擊登陸事件 $addUser.click(function(event) { /* Act on the event */ userName = $usernameInput.val().trim(); if (userName) { $loginPage.fadeOut(); $chatPage.show(); $messageInputBar.show(); $loginPage.off("click"); $currentInput = $messageInput.focus(); socket.emit("add user", userName); } }); });

    (3) index.html:

    
    
        
        
        
        
        
        
        
        
            
    Chatting Room
      Please input your name
      Login
      Send

      (4) 使用aui視圖框架

      github倉庫鏈接
      聊天室鏈接

      文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

      轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80694.html

      相關文章

      • 基于react+react-router+redux+socket.io+koa開發一個聊天

        摘要:最近練手開發了一個項目,是一個聊天室應用。由于我們的項目是一個單頁面應用,因此只需要統一打包出一個和一個。而就是基于實現的一套基于事件訂閱與發布的通信庫。比如說,某一個端口了,而如果端口訂閱了,那么在端,對應的回調函數就會被執行。 最近練手開發了一個項目,是一個聊天室應用。項目雖不大,但是使用到了react, react-router, redux, socket.io,后端開發使用了...

        NusterCache 評論0 收藏0
      • vue+socket.io+express+mongodb 實現簡易多房間在線群聊

        摘要:項目簡介主要是通過做一個多人在線多房間群聊的小項目來練手全棧技術的結合運用。編譯運行開啟服務,新建命令行窗口啟動服務端,新建命令行窗口啟動前端頁面然后在瀏覽器多個窗口打開,注冊不同賬號并登錄即可進行多用戶多房間在線聊天。 項目簡介 主要是通過做一個多人在線多房間群聊的小項目、來練手全棧技術的結合運用。 項目源碼:chat-vue-node 主要技術: vue2全家桶 + socket....

        android_c 評論0 收藏0
      • 手把手教你擼一個網頁聊天

        摘要:前端邏輯搞定之后,思考一下這個聊天室的交互是怎么實現的。在前端監聽一個事件,這個事件的觸發條件是成功和服務端建立連接。攜帶一個參數,即用戶的輸入。別人發送的消息現在就需要在前端建立一個響應服務端有新消息的監聽事件了。 一些廢話:) 最近在學校比較閑,終于有這么一塊時間可以自由支配了,所以內心還是十分的酸爽舒暢的。當然了,罪惡的事情也是有的,比如已經連續一周沒有吃早飯了,其實現在回頭想想...

        nemo 評論0 收藏0
      • 手把手教你擼一個網頁聊天

        摘要:前端邏輯搞定之后,思考一下這個聊天室的交互是怎么實現的。在前端監聽一個事件,這個事件的觸發條件是成功和服務端建立連接。攜帶一個參數,即用戶的輸入。別人發送的消息現在就需要在前端建立一個響應服務端有新消息的監聽事件了。 一些廢話:) 最近在學校比較閑,終于有這么一塊時間可以自由支配了,所以內心還是十分的酸爽舒暢的。當然了,罪惡的事情也是有的,比如已經連續一周沒有吃早飯了,其實現在回頭想想...

        leiyi 評論0 收藏0

      發表評論

      0條評論

      Gemini

      |高級講師

      TA的文章

      閱讀更多
      最新活動
      閱讀需要支付1元查看
      <