C# 如何连接WebSocket服务

提问

C# 如何连接WebSocket服务

回答

  1. 引入nuget WebSocketSharp
  2. 连接服务
using ActiveAlarmDemo.Models;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using WebSocketSharp;

namespace ActiveAlarmDemo.Services
{
    internal class RecordSubPlanService : BackgroundService
    {
        private readonly swaggerClient _swaggerClient;
        private readonly ActiveAlarmContext _activeAlarmContext;
        public RecordSubPlanService(swaggerClient swaggerClient, ActiveAlarmContext activeAlarmContext)
        {
            _swaggerClient = swaggerClient;
            _activeAlarmContext = activeAlarmContext;
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            await Task.Delay(10000);
            Console.WriteLine("RecordSubPlanService");
            var authentication = await _swaggerClient.AuthenticationAsync("client_credentials", "HLT2", "HLT2");
            var eventid = await _swaggerClient.RequestEventSubscriptionAsync(authentication.Access_token, new EventSubscriptionRequest()
            {
                Equips = new List<string>() { "PLSDCluster.High_Voltage.Generators.GEN4" }
            });
            WebSocketSharp.WebSocket webSocket = new($@"ws://172.26.176.171:18100/subscriptions/events/{eventid.Id}"); // in this string, we will type URL of server we want to connect to
            webSocket.OnMessage += OnWebSocketOnOnMessage!;

            webSocket.Connect();//connection to server

            Console.ReadLine();
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            throw new NotImplementedException();
        }

        async void OnWebSocketOnOnMessage(object viewer, MessageEventArgs a)
        {
            //await Task.Run(async () =>
            //{
            var result = JsonConvert.DeserializeObject<List<SoeQueryAlarm>>(a.Data);
            if (result != null)
            {
                await _activeAlarmContext.SoeQueryAlarms.AddRangeAsync(result);
                var c = await _activeAlarmContext.SaveChangesAsync();
                Console.WriteLine("RecordSubPlanService..." + c.ToString());
            }

            //});

        }
    }
}

posted @   东百牧码人  阅读(768)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示