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

資訊專欄INFORMATION COLUMN

基于express和socket.io的簡易版聊天室

dendoink / 2314人閱讀

摘要:簡易版聊天室技術棧功能實現實時聊天創建房間表情包完善私聊效果登錄服務端判斷之前是否登錄過聊天室,如果是則直接進入聊天室,否則跳轉到登錄頁面。客戶端發送創建房間和切換房間的事件給服務端。

Chat

簡易版聊天室

技術棧

express

socket.io

功能

實現

實時聊天

創建房間

表情包

完善

私聊

效果 登錄

服務端判斷之前是否登錄過聊天室,如果是則直接進入聊天室,否則跳轉到登錄頁面。

app.get("/", function (req, res, next) {
  if (req.cookies.name) {
    router.showIndex(req, res, next);
  } else {
    res.redirect("/login");
  }
});
聊天


客戶端發送消息,并接收服務端發來的消息

// 發送消息
$(".send_btn").click(sendMsg)

function sendMsg () {
  // 判斷消息消息是否為空
  let content = info.text().trim();
  if (!content) {
    alert("請輸入內容")
    return;
  }

  // 發送消息后清空文本
  info.text("").focus();
  socket.emit("send msg", content);

  // 將自己發送的消息添加到消息列表當中
  let li_info = $("
  • "); let span_time = $(`${getTime()}`) let p_user = $("

    ").text($.cookie("name")).prepend(span_time); let p_content = $("

    ").text(content); li_info.append(p_user).append(p_content); msg.append(li_info); } // 監聽來自同一房間發來的消息 socket.on("send msg", function (info) { // 將發送過來的消息添加到消息列表中 let li_info = $("
  • "); let span_time = $(`${info.time}`) let p_user = $("

    ").text(info.name).append(span_time); let p_content = $("

    ").text(info.content); li_info.append(p_user).append(p_content); msg.append(li_info); })

    服務端監聽客戶端發來的消息,并將接受到的消息轉發給同一房間中的客戶端

    socket.on("send msg", function (content) {
      // 發送消息給同一房間的客戶端
      socket.to(socket.room).emit("send msg", {
        name: socket.user,
        content: content,
        time: common.getTime()
      })
    })
    創建房間

    創建房間可以分為兩步:用戶創建房間,用戶切換至新的房間。

    客戶端發送創建房間和切換房間的事件給服務端。

    // 添加房間
    addRoom.click(function () {
      // 對房間的判斷之類省略...
    
      if (roomLen > 0 && !exist) {
        socket.emit("add room", room);
        socket.emit("change room", room);
      }
    })
    
    // 刷新用戶列表
    socket.on("refresh users", function (usersName) {
      users.empty();
      for (let userName of usersName) {
        let li = $("
  • ").text(userName); if (userName == $.cookie("name")) { li.addClass("me") } users.append(li) } }) // 刷新房間列表 socket.on("refresh rooms", function ({rooms, active}) { roomsList.empty(); for (let room of Object.keys(rooms)) { let li_room = $(`
  • `); let span_room = $("").text(room) let span_num = $(`${rooms[room].length}人`); if (room == active) { li_room.addClass("active_room"); } li_room.append(span_room).append(span_num); roomsList.append(li_room); } // 更改標題的名稱 now.text(active); })

    服務端增加、切換房間,發送刷新房間列表、用戶列表的事件給客戶端

    // 增加房間
    socket.on("add room", function (room) {
      rooms[room] = [];
    })
    
    // 切換房間
    socket.on("change room", function (to) {
      // 記錄用戶離開的房間
      let from = socket.room;
      common.removeItem(rooms[from], socket.user);
    
      // 將用戶傳送到新的房間
      rooms[to].push(socket.user);
      socket.room = to;
      
      // 發送刷新用戶列表的消息
      for (let i in users) {
        users[i].emit("refresh rooms", {
          rooms: rooms,
          active: users[i].room
        })
      }
    
      // 離開和加入新的房間
      socket.leaveAll();
      socket.join(socket.room);
    
      // 通知離開的房間刷新用戶列表
      socket.to(from)
        .emit("refresh users", rooms[from]);
    
      // 通知進入的房間刷新用戶列表
      io.to(socket.room)
        .emit("refresh users", rooms[socket.room]);
    })

    具體請看源碼,謝謝!

    最后

    貼出來主要希望能吸收建議。點擊查看源碼

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

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

    相關文章

    • 利用express+socket.io實現一個簡易天室

      摘要:用偽代碼來模擬下長輪詢的過程前端利用下面函數進行請求后端代碼做如下更改利用隨機數的大小來模擬是否有新數據有新數據來了長輪詢的確減少了請求的次數,但是它也有著很大的問題,那就是耗費服務器的資源。 寫在前面 最近由于利用node重構某個項目,項目中有一個實時聊天的功能,于是就研究了一下聊天室,在線demo|源碼,歡迎大家反饋。這個聊天室的主要利用到了socket.io和express。這個...

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

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

      android_c 評論0 收藏0
    • 聊一聊Web端即時通訊

      摘要:聊一聊端的即時通訊端實現即時通訊的方法有哪些短輪詢長輪詢流輪詢客戶端定時向服務器發送請求,服務器接到請求后馬上返回響應信息并關閉連接。介紹是開始提供的一種在單個連接上進行全雙工通訊的協議。 聊一聊Web端的即時通訊 Web端實現即時通訊的方法有哪些? - 短輪詢 長輪詢 iframe流 Flash Socket 輪詢 客戶端定時向服務器發送Ajax請求,服務器接到請求后馬上返...

      KevinYan 評論0 收藏0
    • vue.js+socket.io打造一個好玩新聞社區

      摘要:云新聞云新聞收藏的使用需要注意的地方提交的是,而不是直接的狀態變更可以包含任意異步操作。的使用利用實現了簡單的聊天功能,在同一個服務器下。 title: Socket.io+vue打造新聞社區date: 2017-06-12 20:19:05 tags: [vue.js,javascript,socket.io] vue2.0 + socket.io打造一個DIY新聞社區(web第一...

      xiguadada 評論0 收藏0

    發表評論

    0條評論

    dendoink

    |高級講師

    TA的文章

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