asp.net mvc +websocket 推送数据

2025-10-19 05:53:12

1、编写前端需要同步的数据代码

 <div class="leftBoxbottom" style="margin-top: 20px;">

                <a onclick="moreData('jyj_gy')" href="javascript:void(0)"><h3 class="leftBoxtitle">加药间&nbsp;:</h3></a>

                <div class="contentareas">

                    <p class="boxitem">

                        <span class="boxitem_title" style="padding-right: 2px;">乙酸钠储池A液位:</span>

                        <span>

                            <span class="inwalter" id="M_LIT88901A_EU">读取中...</span>

                            <span>m</span>

                        </span>

                   

                    <p class="boxitem">

                        <span class="boxitem_title" style="padding-right: 2px;">乙酸钠储池B液位:</span>

                        <span>

                            <span class="inwalter" id="M_LIT88901B_EU">读取中...</span>

                            <span>m</span>

                        </span>

                   

                    <p class="boxitem">

                        <span class="boxitem_title" style="padding-right: 2px;">PAC储池A液位:</span>

                        <span class="inwalter" id="M_LIT82601A_EU">读取中...</span>

                        <span>m</span>

                   

                    <p class="boxitem">

                        <span class="boxitem_title" style="padding-right: 2px;">PAC储池B液位:</span>

                        <span>

                            <span class="inwalter" id="M_LIT82601B_EU">读取中...</span>

                            <span>m</span>

                        </span>

                   

                    <p class="boxitem">

                        <span class="boxitem_title" style="padding-right: 2px;">PAC投加量流量:</span>

                        <span>

                            <span class="inwalter" id="PACLDOSE_FLOW">读取中...</span>

                            <span>m³/h</span>

                        </span>

                   

                    <p class="boxitem">

                        <span class="boxitem_title" style="padding-right: 2px;">乙酸钠溶液投加流量:</span>

                        <span class="inwalter" id="CH3OONADOSE_FLOW">读取中...</span>

                        <span>m³/h</span>

                   

                </div>

            </div>

2、编写js代码

<script type="text/javascript">

        $(function () {

            WebSocketSet("getdata");

        })

     

var ws;

var re = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/ 

function WebSocketSet(x, callBack) {

    if (!callBack) {

        callBack = function (rs) {

            var data = JSON.parse(rs);

            //console.log("根本", data)

            //添加更新时间

            var updatetime = data[0].UpdateTime;

            $("#updatetime").html(updatetime);

            $.each(data, function (index, item) {

                getdatas(item);

            });

            setTimeout(function () {

                SendMessage(x);

            }, 30*1000);            

        }

    }

    ws = new WebSocket("ws://" + window.location.hostname + ":" + window.location.port + "/webapi/WebSocket");

    ws.onopen = function () {

        SendMessage(x);

    };

    ws.onmessage = function (data) {

        callBack(data.data);

    };

    ws.onerror = function (error) {

        alert("链接错误,错误信息如下:"+error.data )

    };

    ws.onclose = function () {

        //alert("Disconnected!")

    };

};

function SendMessage(x) {

        if (ws.readyState == WebSocket.OPEN) {

            ws.send(x);

        }

        else {

            alert("Connection is Closed!");

        }

}

function getdatas(item){

    item.id = item.id + "";

    var datastring;

    $("#" + item.id).html(datastring) 

}

    </script>

3、编写后台代码

 public string Get(string indexName)

        {

            using (Models.dbEntities db = new Models.dbEntities())

            {

                return GetDataJson(db, indexName);

            }

        }

        private async Task ProcessWSChat(AspNetWebSocketContext arg)

        {

            using (Models.Entities db = new Models.Entities())

            {

                WebSocket socket = arg.WebSocket;

                string Receivemessage = null, returnMessage = null;

                ArraySegment<byte> buffer;

                try

                {

                    while (true)

                    {

                        buffer = new ArraySegment<byte>(new byte[1024]);

                        WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                        if (socket.State == WebSocketState.Open)

                        {

                            Receivemessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);

                            if (Receivemessage.Equals("0000"))

                            {

                                throw new Exception("关闭连接成功");

                            }

                            returnMessage = GetDataJson(db, Receivemessage);

                            buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(returnMessage));

                            await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

                        }

                        else

                        {

                            db.Dispose();

                            break;

                        }

                        //Thread.Sleep(1000);

                    }

                }

                catch (Exception e)

                {

                    db.Dispose();

                }

            }

        }

private string GetDataJson(Models.Entities db, string indexName)

        {

            try

            {

                string[] keyArr = null;

                switch (indexName)

                {

                    case "getdata":   keyArr = new string[] { "CCPH", "CCT", "P104_RUNTIME_TTL_HIS", "B104_RUNTIME_TTL_HIS", "P103_RUNTIME_TTL_HIS", "B103_RUNTIME_TTL_HIS", "P102_RUNTIME_TTL_HIS", "B102_RUNTIME_TTL_HIS", "CCB102_F", "CCB102_I", "P101_RUNTIME_TTL_HIS", "B101_RUNTIME_TTL_HIS", "CCB101_F", "CCB101_I"};

                        break;

                    default: return null;

                }

               return db.RealTime.Where(s => keyArr.Contains(s.Tag)).Select(s => new

                {

                    id = s.Tag,

                    s.UpdateTime,

                    Value = s.Value,

                    TagName=s.TagName,

                    s.ExceptionSatus

                }).ToJson();

            }

            catch (Exception e)

            {

                throw new Exception(e.Message);

            }

        }

其中keyArr的数组字符串和前台定义的编号对应

4、定义WebApiConfig

public static void Register(HttpConfiguration config)     

            config.Routes.MapHttpRoute(

                name: "websocket",              

                routeTemplate: "API/{controller}/{action}",

                defaults: new { id = RouteParameter.Optional }

            );

 }

5、效果,实时推送数据

asp.net mvc +websocket 推送数据

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:100
  • 阅读量:183
  • 阅读量:66
  • 阅读量:53
  • 阅读量:142
  • 猜你喜欢