【Azure Developer】App Service + PubSub +JS 實現多人版駭客帝國文字流效果圖

2022-05-28 12:01:54

需要描述

1)實現駭客帝國文字流效果圖,JS功能

2)部署在雲中,讓大家都可以存取,App Service實現

3)大家都能傳送訊息,並顯示在文字流中,PubSub(websocket)實現

 

終極效果顯示:

 

專案建立完成後,可以在本機進行偵錯。正常執行後即可釋出到Azure App Service上。因程式碼簡單並且可讀性強,可自行理解。

 

4)通過VS 2022釋出到App Service中

VS 2022 通過Publish Profile 釋出站點演示動畫:

釋出版本操作完成。

 

附錄一:本地駭客帝國文字流效果,可自行輸入即修改內容版

複製內容,直接儲存在本地檔案中,檔案命名為 localstream.html後使用瀏覽器開啟即可

<html>
<style>
    html,
    body {
        margin: 0;
        padding: 0;
        background-color: rgb(0, 0, 0);
    }

    #divList {
        width: 98%;
        height: 79%;
        border: solid 1px rgb(0, 15, 0);
        ;
        margin: 0px auto;
        overflow: hidden;
        position: relative;
    }

    .divText {
        position: absolute;
    }

    .divText span {
        display: block;
        font-weight: bold;
        font-family: Courier New;
    }
</style>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

<body> <br>
    <h2 style="text-align:center; color:white;">STREAM BOARDCAST (<span id="spanCount">0</span>)</h2>
    <div id="divList">
    </div>
    <h3 style="text-align:left; color:grey;">Send</h3>
    <div style=" margin: 5px 15px;">
        <input id="inputmessage" style="text-align:left; color:green; width: 86%; height: 55px; font-size: 40px;" onsubmit="sendmessage()"><button
            style="text-align:center; color:green; width: 12%; height: 55px;font-size: 40px;" onclick="sendmessage()">Send</button>
    </div>
    <div style="display:none;">
        <h1>Message</h1>
        <div id="output"></div>
        <br>
        <h1>Message</h1>
        <div id="outputmsg"></div>
    </div>
    <script>
        var textarray = ["Hello Mooncake,Welcome to use PubSub", "Who are you? Put your PIN ... "];

        function sendmessage() {
            textarray.push($('#inputmessage').val());
            $('#inputmessage').focus();
        }



        function rand(min, max) {
            return min + Math.round(Math.random() * (max - min));
        }

        function add(message) {
            var maxwdth = $('#divList').width();
            var x = rand(0, maxwdth);
            var html = '<div class="divText" style="left:' + x + 'px; bottom:500px;">';

            var color = [];
            for (var i = 1; i < message.length; i++) {
                var f = i.toString(16);
                color.push('0' + f + '0');
            }

            var fontSize = rand(20, 36);
            for (var i = 1; i <= message.length; i++) {
                var c = message[i - 1];
                html += '<span class="s' + i + '" style="color:#' + color[i - 1] + '; font-size:' + fontSize + 'px; text-shadow:0px 0px 10px #' + color[i - 1] + ';">' + c + '</span>';
            }
            html += '</div>';
            $('#divList').append(html);
        }

        function run() {
            var x = rand(0, 100);
            if (x < 100) {
                var lgh = textarray.length;
                if (textarray.length > x) add(textarray[x]);
                else
                    add(textarray[x % lgh]);
            }
            $('#spanCount').html($('.divText').size());

            $('.divText').each(function () {
                var y = $(this).css('bottom');
                y = parseInt(y);
                y -= $(this).find('span').eq(0).height();
                $(this).css('bottom', '' + y + 'px');
                if (y + $(this).height() <= 0) {
                    $(this).remove();
                    return;
                }
            });

            window.setTimeout(run, 200);
        }
        run();

    </script>
</body>

</html>

PS: 與PubSub版本相比,只是移除了WebSocket的相關程式碼

執行效果

 

 

參考資料

JS 駭客帝國文字下落效果: https://www.cnblogs.com/zjfree/p/3833592.html 

教學:使用子協定在 WebSocket 使用者端之間釋出和訂閱訊息:https://docs.microsoft.com/zh-cn/azure/azure-web-pubsub/tutorial-subprotocol?tabs=csharp

快速入門:部署 ASP.NET Web 應用:https://docs.azure.cn/zh-cn/app-service/quickstart-dotnetcore?tabs=net60&pivots=development-environment-vs