丶万一
2021-11-26 10:29
采纳率: 100%
浏览 35
已结题

NET 5.0 请教以下如何在Controller中调用JS函数

我是用的是NET 5.0创建的ASP.NET MVC程序,需求是程序启动后通过Socket接收用户端数据然后推送到前端上。

    public class MapController : Controller
    {
        private readonly INodeServices _services;
        public MapController(INodeServices services) 
        {
            _services = services;
        } 
        static CnUDP udpClient;  // 封装的一个UDP通讯
        bool isrun = true;  // 判断是否启动了UDP
        public IActionResult Index()
        {
            if (isrun) {
                isrun = false;
                if (udpClient == null)
                {
                    udpClient = new CnUDP(5088);
                    //订阅接收信息事件
                    udpClient.OnUdpMessage += OnRecv;
                    //启动接收线程
                    udpClient.StartListen();
                }
            }

            return View();
        }


        ///<summary>
        /// 信息处理函数
        /// </summary>
        /// <param name="buffer">接收到的数据</param>
        /// <param name="point">数据来源信息</param>
        IActionResult OnRecv(byte[] buffer, System.Net.IPEndPoint point)
        {
            Console.WriteLine(point.Address.ToString());
            // 解析消息
            double dX = BitConverter.ToDouble(buffer, 0);
            double dY = BitConverter.ToDouble(buffer, 8);

            ViewData["dX"] = dX;
            ViewData["dY"] = dY;

            Console.WriteLine($"\n收到位置信息:\nX: {dX} Y:{dY}");

            // 如何传递给前端???
            return View();
        }
    }

我目前的处理办法是,建立一个Socket的接收客户端的数据,在解析数据之后将数据推送到前端,但是卡在了C#调用JS函数这一步,网上找了一些教程如Pages,Context的办法在NET5.0中似乎无法实现,也可能是类被移植到别的模块中了。
如果有其他更便捷的处理方式也可以,帮帮忙!

  • 好问题 提建议
  • 收藏

2条回答 默认 最新

  • CSDN专家-showbo 2021-11-26 13:35
    已采纳

    b/s系统和和c/s系统不一样,前端没有能直接链接udp的类。

    前端要实时数据可以用websocket,websocket服务器.net有Fleck.dll类库,前端原生websocket进行连接。客户端(目测应该是c/s模式)发送的数据题主如果有能力改的话,应该也可以用websocket发送数据到websocket服务器,然后服务器端fleck收到收据后可在转发给前端websocket,前端websocket接受数据进行需要的处理。

    还有个折中的办法,udp接收到的数据放到application对象中,就是用application建立一个集合,方便前端访问。或者直接写入数据库中也行。新建一个action读取application或者数据库中内容输出【注意不能按照题主那样在OnUdpMessage回调中输出内容 】,然后前端用setInterval+ajax不断的请求action获取数据

    编辑记录

    已采纳该答案
    评论
    解决 1 无用
    打赏 举报
  • CSDN专家-Time 2021-11-26 11:12

    ExecuteScript
    可以直接调用js函数。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题