成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于微信公眾號的多房間實時彈幕消息系統(tǒng)

Anonymous1 / 448人閱讀

摘要:同時借助實現(xiàn)在非接口中推送消息流。每分秒鐘最多的彈幕數(shù)目彈幕數(shù)量過多時優(yōu)先加載最新的。

項目起始原因

源于數(shù)據(jù)庫課設(shè)和以前的一次突發(fā)奇想。其實還有其他微信公眾號的彈幕系統(tǒng),但是我發(fā)現(xiàn)使用體驗不佳,因為那種彈幕系統(tǒng)都是私用,并且只支持同時進行一個房間的使用。所以便萌生了自己寫一個的想法。(第一次寫md,有點不會,希望諒解--)

主要技術(shù)點

Redis(結(jié)合socket實現(xiàn)在非socket中主動發(fā)送socket消息)

MySQL(數(shù)據(jù)持久化)

socket.io(實現(xiàn)消息實時推送)

Express(后端主要使用框架)

實現(xiàn)的主要技術(shù)點和難點

接受微信服務(wù)器的消息推送

微信服務(wù)器推送的消息,我們在Express中通過data數(shù)據(jù)流的形式接受,然后xml轉(zhuǎn)為json格式。即得到我們需要的數(shù)據(jù)。部分代碼如下(getXml為封裝的函數(shù)用于處理數(shù)據(jù)):

//  處理上傳消息請求
let promise = new Promise((resolve,reject) => {
  let buffer = [];
  //監(jiān)聽 data 事件 用于接收數(shù)據(jù)
  req.on("data",chunk => {
      buffer.push(chunk);
  });
  //監(jiān)聽 end 事件 用于處理接收完成的數(shù)據(jù)
  req.on("end",() => {
      let msgXml = Buffer.concat(buffer).toString("utf-8");
      xml.xmltool.getXml(msgXml).then(datas => {
          resolve(JSON.stringify(datas.xml));
      }).catch(e => {
          reject(JSON.stringify(e));
      })
  })
});

websocket(socket.io)

socket.io是已經(jīng)封裝好的一個庫。我們只需要安裝之后,就可方便的使用。同時借助Redis實現(xiàn)在非socket接口中推送socket消息流。需要使用到的模塊主要是:

socket.io

socket.io-redis

socket.io-emitter

部分核心代碼如下(作為一個模塊導(dǎo)出直接使用):

const redis = require("redis");
const ioRedis = require("socket.io-redis");

// var roomInfo = {};

let ioCreater = function(server) {
    const io = require("socket.io")(server);
    io.on("connection", function (socket) {

        var url = socket.request.headers.referer;
        var splited = url.split("/");
        var roomID = splited[splited.length - 1];   // 獲取房間ID
        // var user = "";
        console.log(socket.request.headers);
        console.log(roomID);
        socket.join(roomID);    // 加入房間

       
        socket.on("disconnect", function(){    //斷開socket連接的時候觸發(fā)
            console.log("user disconnected");
        });
        socket.on("message", function(){  //接收socket連接消息的時候觸發(fā)
            console.log("received a message");
        });
        socket.on("connect", function(){  //建立socket連接時候觸發(fā)
            console.log("connect a socket client");
        });

    });

    io.adapter(ioRedis({host:"127.0.0.1", port:"6379" })); //使用socket.io-adapter設(shè)置緩存依賴
    return io; 
};
 module.exports = ioCreater;

多房間

在使用socket.io的時候,我們很方便的就可以創(chuàng)建socket.io多房間。我們只需要在socket連接的時候帶上參數(shù)即可。所以在初始化的時候,我們需要將房間號發(fā)到前端,前端拿到之后,創(chuàng)建相應(yīng)的socket連接即可。同時前端頁面可以直接使用node_modules里面的socket包。

    
    

彈幕實現(xiàn)

因為課設(shè)有時間限制的原因,所以沒有自己去手動實現(xiàn)彈幕效果,我直接在github上面找了一個基于jQuery的彈幕插件。jQuery.danmu.js(體驗還不錯)部分核心代碼如下:



  
    <%= title %>
    
    
    
    
  
  
  
  
寫在最后的話

代碼很粗糙,如果有參考價值的話,希望多多支持。如果有不懂得地方,請?zhí)岢鰜恚視M我全力為您解答的。附上github地址,如果對您有幫助的話,希望給我一個小小的star,這是對我最大的鼓勵和支持,前端的路很長,我希望自己能堅持下去??!共勉

github地址

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97974.html

相關(guān)文章

  • Web實時彈幕原理分析

    摘要:官方地址支持協(xié)議用于實時通信和跨平臺的框架。如實時分析系統(tǒng)二進制流數(shù)據(jù)處理應(yīng)用在線聊天室在線客服系統(tǒng)評論系統(tǒng)等。官方地址動畫效果是一款優(yōu)雅的網(wǎng)頁彈幕插件支持顯示圖片文字以及超鏈接。 廢話不多說,首先上效果圖。 效果圖 showImg(https://segmentfault.com/img/bVGo0P?w=521&h=635); 用途 搞活動、年會的時候,在大屏幕上實時顯示留言、吐...

    tigerZH 評論0 收藏0
  • 2016年云巴產(chǎn)品更新合集

    摘要:實時彈幕使用云巴,直播平臺可快速實現(xiàn)視頻直播中發(fā)送彈幕打賞點贊等實時互動功能。云巴聊天室支持圖片上傳文件發(fā)送文檔評論系統(tǒng)正式上線新增搜索功能,我們會做得更好。 SDK 篇 Android SDK 更新 Release 1.6.3后臺進程相互拉起的特殊版本 Release 1.6.4增加 so 文件 Release 1.8.0支持小米、華為推送,無需注冊第三方賬號 Release 1....

    CoffeX 評論0 收藏0

發(fā)表評論

0條評論

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