1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        前端項目實戰(zhàn):麥當勞對講機,手擼一個!

        共 6070字,需瀏覽 13分鐘

         ·

        2024-05-27 08:51

           

        大廠技術  高級前端  Node進階

        點擊上方 程序員成長指北,關注公眾號

        回復1,加入高級Node交流群

        前端,我眼看它出現、它成長、它成熟,卻遠遠不是結束。因此,我想說給你聽,讓你對我們身處的行業(yè),有個大框架式的認知,知道:它是怎么來的,從而去判斷,它要往哪里去。

        引言:這周,麥當勞APP崩了上了熱搜!什么情況?漢堡那么搶手了嗎?真實原因是:麥當勞App崩了!是的,說出來大家可能都不相信。僅僅是因為一個“六一兒童節(jié)”的定制玩具——對講機(今年推出的一款麥樂雞薯條“對醬機”,購買任意食品或者套餐+38元即可換購。),麥當勞APP又經受了一波大流量的考驗。整個朋友圈都在搶對講機。

        但是對于窮游人生的我們,38塊也太貴了。我們要不手擼一個?我們可是無所不能的前端啊。畢竟,全棧我們都能做~哈哈。不嘚瑟,下面就講講,如何通過前端技術實現一個網頁版的對講機。真正做到“對醬機”自由!

        從現象到靈感:技術人的職業(yè)病

        麥當勞App的這次小“風波”,讓我有了一個奇特的想法。想象一下,如果將WebRTC、WebSocket等現代前端技術巧妙融合,我們完全可以打造出一款即時、流暢、跨平臺的虛擬對講機應用,讓我們在親愛的她或者孩子面前收獲“哇塞~”。先上效果!

        技術揭秘:前端如何實現虛擬對講機?

        1. 1. WebRTC的魔力:實時通訊要想做的精致,當然要用WebRTC。因為WebRTC允許瀏覽器間直接進行音視頻通信,無需中間服務器轉碼。我們無所不能的前端工程師可以利用它來捕捉音頻輸入,實現即時音頻傳輸,讓一臺對講機的每一句話都能即時送達到另一端。

        2. 2. WebSocket的橋梁作用:在WebRTC處理音視頻數據的同時,WebSocket作為高效的雙向通信協(xié)議,能夠承擔起信令傳輸的重任,確保對講雙方的連接建立與維護,實現用戶間的無縫對話。

        但是!

        本次我準備先擼一個版本,等不了了。技術棧選擇“HTML\CSS\JAVASCRIPT\NodeJS\WebSocket”,做一個中心化非點對點的版本,先玩一下,看下能不能收獲“哇塞~”。

        以下是我的整體方案和關鍵實現代碼(可運行的代碼包關注公眾號程序員成長指北,回復麥當勞獲得)

        1. 1. 設計界面: 使用HTML和CSS來設計對講機的界面。因為是丐版,肯定要有一個錄制語音的按鈕、一個結束錄制的按鈕、一個播放語音的操作。把功能先做上去。

        2. 2. 實時通信

          • ? 前端:WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。前端開發(fā)出ws代碼,使用WebSocket在前端和后端NodeJS之間建立實時連接。

          • ? 服務器端:使用Node架構一個服務器來處理WebSocket連接并廣播消息。使用如ws來完成WebSocket的處理。

        3. 3. 編寫JavaScript代碼

          • ? 先用三大語言把基本元素寫出來,用JS綁定好各種事件。

          • ? 連接WebSocket:在前端JavaScript代碼中,你需要建立與WebSocket服務器的連接。

          • ? 發(fā)送消息:當用戶點擊發(fā)送按鈕時,捕獲文本輸入框中的文本,并通過WebSocket連接發(fā)送。

          • ? 接收消息:監(jiān)聽WebSocket連接上的消息事件,當收到消息時,將其更新到音頻audio內容中,用來播放語音。

        4. 4. 調試優(yōu)化界面

          • ? 這里用gpt生成了一些麥當勞風格的元素,比如按鈕、頭圖、背景等等,這樣就有了一種玩具風格;

          • ? 可以把audio設置為自動播放,按下開始錄制,抬起結束錄制,這樣就把兩個按鈕變成了一個,更像對講機;

        以下是核心代碼:

        // web-radio.html
        <!DOCTYPE html>  
        <html lang="en">  
        <head>  
            <meta charset="UTF-8">  
            <meta name="viewport" content="width=device-width, initial-scale=1.0">  
            <title>麥當勞對講機</title>  
        </head>  
        <body>  
            <input type="text" id="messageInput" placeholder="輸入消息...">  
            <button onclick="sendMessage()">發(fā)送</button>  
            <div id="chatLog"></div>  
          
            <script>  
                let ws = new WebSocket('ws://your-websocket-server-url');  
          
                ws.onmessage = function(event) {  
                    let chatLog = document.getElementById('chatLog');  
                    chatLog.innerHTML += event.data + '<br>';  
                };  
          
                function sendMessage() {  
                    let messageInput = document.getElementById('messageInput');  
                    let message = messageInput.value;  
                    ws.send(message);  
                    messageInput.value = ''; // 清空輸入框  
                }  
            </script>  
        </body>  
        </html>

        后端代碼

        // web-radio-server.js
        const WebSocket = require('ws');  
        const wss = new WebSocket.Server({ port8080 });  
          
        wss.on('connection'function connection(ws) {  
            ws.on('message'function incoming(message) {  
                console.log('received: %s', message);  
                wss.clients.forEach(function each(client) {  
                    if (client !== ws && client.readyState === WebSocket.OPEN) {  
                        client.send(message);  
                    }  
                });  
            });  
          
            ws.on('close'function close() {  
                console.log('連接已關閉');  
            });  
        });  
          
        console.log('WebSocket 服務器正在監(jiān)聽 8080 端口');

        運行步驟

        • ? 確保你的環(huán)境中已經安裝了Node.js。

        • ? 在項目的根目錄下創(chuàng)建一個名為web-radio.html的文件,并將上面的前端代碼復制進去。

        • ? 創(chuàng)建一個名為web-radio-server.js的文件,并將上面的后端代碼復制進去。

        • ? 在項目根目錄下,使用npm安裝ws庫(如果你還沒有安裝):

        //bash
        npm install ws
        //運行WebSocket服務器:
        //bash
        node web-radio-server.js
        • ? 打開一個瀏覽器,并訪問web-radio.html文件;

        • ? 在另一個瀏覽器標簽或設備上打開相同的web-radio.html頁面,你應該能夠在兩個頁面上看到并發(fā)送實時消息;

        結語

        技術,是連接現實與想象的橋梁。雖然,只是做了一個很簡單的實現,但這是個開始。生活中很多的細節(jié)都可以成為我們一個技術人娛樂技術的方式,可能,這也是我們作為技術人,才能理解的快樂。接下來,我會使用WebRTC來實現一個比較真實的對講機。

        Node 社群

           


        我組建了一個氛圍特別好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你對Node.js學習感興趣的話(后續(xù)有計劃也可以),我們可以一起進行Node.js相關的交流、學習、共建。下方加 考拉 好友回復「Node」即可。

           “分享、點贊、在看” 支持一下

        瀏覽 139
        1點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        1點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            人人摸人人操人人射 | 尤物在线观看视频 | 就要操山东老熟女的逼逼 | 美女搞逼 | 亚洲AV无码网站 | 伊人成人在线视频 | 操屄乱伦视频 | 亚洲高清超级无码在线视频观看 | 亚洲乱熟女香蕉一区二区三区少妇 | 久久精国产 |