Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务
背景
需要Client跑服务在终端间隔执行任务,我的目标是运行在树莓派上
Client代码
如果未连接成功时隔3秒重新连接服务器
public static void Reconnect()
{
var isLink = false;
do
{
Thread.Sleep(3000);//3秒
isLink = Signalr().GetAwaiter().GetResult();
} while (!isLink);
}
通过命令开启 Quartz 调度器
public static async Task<bool> Signalr()
{
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间
var urlstr = "https://localhost:44363//hubs";
var url = new Uri(urlstr);
var connection = new HubConnectionBuilder()
.WithUrl(url)
.Build();
hubConnection = connection;
connection.On<int, string>("SendCmd", (cmd, data) =>
{
switch (cmd)
{
case 10001:
if (scheduler == null)
{
InJobAsync().Wait();
}
else
{
if (scheduler.IsStarted != true)
{
InJobAsync().Wait();
}
else
{ connection.SendAsync("ClientMsg", "正在运行");
}
} break;
case 10010:
var send = 10;
Int32.TryParse(data, out send);
if (scheduler != null)
scheduler.Clear();
InJobAsync(send).GetAwaiter().GetResult();
break;
default:
connection.SendAsync("ClientMsg", "未知命令");
break;
}
});
connection.Closed += e =>
{
if (e != null)
{
Console.WriteLine("Connection closed..." + e.Message);
}
else
{
Console.WriteLine("开始重连..." + e.Message); }
Reconnect();
return Task.CompletedTask;
};
try
{
Console.WriteLine($"开始连接服务器[{urlstr}]");
await connection.StartAsync();
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
Console.WriteLine($"耗时:{seconds} 服务器[{urlstr}]连接成功!");
return true;
}
catch (Exception err)
{
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double seconds = timespan.TotalSeconds; // 总秒数
var meg = $"执行时间:{seconds} 连接失败:{err.Message}";
Console.WriteLine(meg);
return false;
}
}
public static StdSchedulerFactory factory = null;
public static IScheduler scheduler = null;
public static async Task InJobAsync(int iInterval = 10)
{ if (factory == null)
{
factory = new StdSchedulerFactory();
}
if (scheduler == null)
{
scheduler = await factory.GetScheduler();
} // 启动任务调度器
await scheduler.Start(); IJobDetail job = JobBuilder.Create<FlowerJob>()
.WithIdentity("job1", "group1")
.WithDescription("定时数据传送")
.Build();
ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("trigger1") // 给任务一个名字
//.StartAt(myStartTime) // 设置任务开始时间
.ForJob("job1", "group1") //给任务指定一个分组
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(iInterval) //循环的时间
.RepeatForever())
.Build(); // 开启任务调度器
await scheduler.ScheduleJob(job, trigger); }
Jobs任务
public class FlowerJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
//Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}执行任务:"+context.JobDetail.Description); //逻辑代码 return Task.CompletedTask;
}
}
Client 客户端AspNetCore.SignalR 通讯服务器 Quartz 执行任务的更多相关文章
- WebSocket Client连接AspNetCore SignalR Json Hub
突然有个需求,需要使用普通的websocket客户端去连接SignalR服务器. 因为使用的是.net core 版的signalr,目前对于使用非signalr客户端连接的中文文档几乎为0,在gay ...
- 微信小程序与AspNetCore SignalR聊天实例
微信小程序与aspnetcore signalr实例 本文不对小程序与signalr做任何介绍,默认读者已经掌握 aspnetcore Signalr文档 小程序文档 写在之前 SignalR没有提供 ...
- Asp.NetCore+Microsoft.AspNetCore.SignalR前后端分离
1.新建WebApi 2.安装Microsoft.AspNetCore.SignalR 3.新建一个集线器和消息类 using Microsoft.AspNetCore.SignalR; using ...
- Oracle client客户端简易安装网上文档一
Oracle client客户端简易安装网上文档一-------------------------------------------------------------------------一. ...
- Tomcat配置错误导致Quartz执行两次问题
以下基于tomcat服务器 我们通常将域名映射到指定服务器的端口上,以通过域名直接访问服务,如http://www.abc.com域名已绑定到本机的80端口,项目名wechat,则直接访问http:/ ...
- Android手机SSH Client客户端推荐JuiceSSH
Windows上建立ssh服务器 参见: http://www.cnblogs.com/xred/archive/2012/04/21/2461627.html Android手机SSH Client ...
- ABP 找不到版本为 (>= 1.0.0-preview1-27891) 的包 Microsoft.AspNetCore.SignalR 错误
错误描述: 下载ABP模板项目3.4.1的版本(当前最新版本),编译加载nuget包Microsoft.AspNetCore.SignalR时会报如下错误: 严重性 代码 说明 ...
- 关于mysql安装后在客户端cmd插入语句无法执行的问题
关于mysql安装后在客户端cmd插入语句无法执行的问题 因为windows cmd默认字符集是gbk,当character_set_client=utf8时,cmd中出现中文会报错:characte ...
- 同一台电脑中同时安装oracle database 服务器端和oracle client 客户端时注意
如果在一台电脑中同时安装oracle的客户端和服务器端软件, 一定要先安装oracle database 服务端,并进行相应的配置 listener.ORA. 然后再去安装oracle client ...
随机推荐
- youtube视频在线下载
youtube视频在线下载网站: https://www.clipconverter.cc/ youtube视频样例: https://www.youtube.com/watch?v=NMkgz0AR ...
- 大学外语四六级英语词汇CET
anticipation n. 预期,期望 appreciation n. 感谢,感激 array n. 陈列,一系列 assurance n. 保证 emergency n. 紧急情况 encour ...
- Android RadioButton控件
RadioButton 单选按钮 常用属性: text 文本 checked=“true” 默认选中 一组互斥的单选按钮要放在RadioGroup中.RadioGroup常用属性: orienta ...
- CI/CD DevOps
CI/CD DevOps 通过技术工具链完成持续集成CI.持续交付CD.用户反馈和系统优化的整合,实现跨团队的无缝协作(DevOps). 什么是持续集成? 他是开发每天代码更新的副本,所有的开发工作都 ...
- 转:Oracle的列转行函数:LISTAGG()
先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nat ...
- Django 练习班级管理系统七 -- 编辑老师列表(二)
修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...
- 使用python实现后台系统的JWT认证
介绍 JWT协议似乎已经应用十分广泛,JSON Web Token--一种基于token的json格式web认证方法.基本的原理是,第一次认证通过用户名密码,服务端签发一个json格式的token.后 ...
- Golang 需要避免踩的 50 个坑(三)
前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷.如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到. 如果花时间学习官方 ...
- 其他综合-CentOS 7 使用yum 安装 PHP 5.6
其他综合-CentOS 7 使用yum 安装 PHP 5.6 1.删除旧php包 yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php- ...
- nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板
参考博客:https://blog.csdn.net/stpeace/article/details/9067029 参考博客:https://blog.csdn.net/baidu_35643793 ...