簡體   English   中英

使用SignalR傳輸數據

[英]Using SignalR to stream data

我剛開始使用SignalR,我想知道如何使其適合我的任務。

可以說我有一個大小為30的列表(用C#表示)。我想一次向客戶端推送該列表的x號。 客戶端將傳入x,然后服務器將x傳出x直到列表末尾。

我已經獲得了可以運行的代碼,但結果卻很奇怪。 希望任何人能幫助我。

我的代碼是:

我的PersistentConnection類

public class MyConnection1 : PersistentConnection
    {
        protected override Task OnConnected(IRequest request, string connectionId)
        {
            return Connection.Broadcast("connection " + connectionId + " connected!");
        }

        protected override Task OnReceived(IRequest request, string connectionId, string data)
        {
            int milisecons = 2000;
            List<string> myList = new List<string>();
            myList.Add("1");
            myList.Add("2");
            myList.Add("3");
            myList.Add("4");
            myList.Add("5");
            myList.Add("6");
            myList.Add("7");
            myList.Add("8");
            myList.Add("9");
            myList.Add("10");
            myList.Add("11");
            myList.Add("12");
            myList.Add("13");
            myList.Add("14");
            myList.Add("15");
            myList.Add("16");
            myList.Add("17");
            myList.Add("18");
            myList.Add("19");
            myList.Add("20");
            myList.Add("21");
            myList.Add("22");
            myList.Add("23");
            myList.Add("24");
            myList.Add("25");
            myList.Add("26");
            myList.Add("27");
            myList.Add("28");
            myList.Add("29");
            myList.Add("30");

            int no = Convert.ToInt32(data);

            var dividedGroupList = myList.Select((x, i) => new { Index = i, Value = x }).GroupBy(x => x.Index / no).Select(x => x.Select(v => v.Value).ToList()).ToList();

            dividedGroupList.ForEach(x => { Connection.Send(connectionId, x); Thread.Sleep(milisecons); });

            return null;
        }
        protected override Task OnDisconnected(IRequest request, string connectionId)
        {
            return Connection.Broadcast("connection " + connectionId + " disconnected!");
        }
    }

我的HTML頁面

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="Scripts/jquery-1.10.2.min.js"></script>
    <script src="Scripts/jquery.signalR-2.0.0.min.js"></script>

</head>
<body>
    <script type="text/javascript">
        $(function () {
            var connection = $.connection('/echo');
            connection.start().done(function () {
                $('#message').append('<li>yay</li>');
            });

            $("#btn").click(function () {
                connection.send($('#msg').val());

                connection.received(function (data) {
                    $('#message').append('<li>' + data + '</li>');
                });
            });
            $("#dcbtn").click(function () {
                connection.stop();
            });
        });
    </script>

    <input type="text" id="msg" />
    <input type="button" id="btn" value=" ME!" />
    <input type="button" id="dcbtn" value=" DC" />

    <ul id="message"></ul>
</body>
</html>

第一次輸出“ ME!” 已按下按鈕(非常抱歉,沒有足夠的聲譽在此處發布圖片)

•yay
•1,2,3,4,5,6,7,8,9,10
•11,12,13,14,15,16,17,18,19,20
•21,22,23,24,25,26,27,28,29,30

第二次“ ME!” 按下按鈕

•yay
•1,2,3,4,5,6,7,8,9,10
•11,12,13,14,15,16,17,18,19,20
•21,22,23,24,25,26,27,28,29,30
•1,2,3,4,5,6,7,8,9,10                        <==== repeated here onwards
•1,2,3,4,5,6,7,8,9,10                           
•11,12,13,14,15,16,17,18,19,20
•11,12,13,14,15,16,17,18,19,20
•21,22,23,24,25,26,27,28,29,30
•21,22,23,24,25,26,27,28,29,30

不管我是否單擊“ DC”按鈕(調用“ connection.stop()”方法),重復次數都將保持增加1。

任何建議都足夠

非常感謝!

編輯我設法使它使用集線器。 但是,我仍然想知道在這種低水平下實際發生了什么。 我在這里做錯了什么?

首先,僅當您有需要使用PersistentConnection的特定情況時才應使用PersistentConnection,而應使用Hubs。

其次,永遠不要阻塞Hub或PersistentConnection對象中的線程-該對象表示連接操作,因此在connect事件,disconnect事件或方法調用的生命周期中,它是瞬態的。

而是創建一個應用程序,然后可以向集線器發出呼叫-維護應用程序中的計時器。 有關如何呼叫集線器的信息,請參見以下內容:

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#callfromouthub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM