消息订阅SignalR Hub

来源:互联网 发布:照片制作软件 编辑:程序博客网 时间:2024/05/21 10:39

  消息订阅(观察者模式)

  这里不对这个模式做过多的讲解,具体内容请移步:百度百科

  首先我们创建一个ASP.NET Core的空项目

  然后添加相关引用Microsoft.AspNetCore.SignalR .

  然后,添加我们的熟悉的SignalR Hub,如下:

  public class StreamingHub : Hub

  {成都郫县做阴茎延长术哪里的医院好
成都龙泉治疗尿道炎哪家男科医院
成都青羊区哪家医院治疗前列腺炎好
成都骡马市附近割包皮医院哪里好
成都火车北站哪个人流医院好  public void SendStreamInit()

  {

  //开启客户端订阅

  Clients.All.InvokeAsync("streamStarted");

  }

  //被订阅的消息

  public IObservable StartStreaming()

  {药物流产有哪些副作用?
武侯区治疗早泄哪个医院比较专业
成都锦江区哪里有好的阴茎增粗医
成都天府广场做人流要多少钱
成都红瓦寺无痛人流哪家医院
治阳痿成都成华区哪家医院好
成都金牛区做阴茎弯曲术专业哪家医院好  return Observable.Create(

  async (IObserver observer) =>

  {

  for (int i = 0; i < 10; i++)

  {

  observer.OnNext($"发送内容......{i}");

  await Task.Delay(1000);

  }

  });

  }里有治疗月经不调的医院?
成都都江堰哪儿的医院人流好
成都郫县治疗宫外孕的医院哪家好
成都郫县治疗阳痿的医院哪儿好
青羊区治疗阴茎短小哪家男科医院好?
青羊区处女膜修复哪家医院好?
成都武侯区做阴唇整形哪里的医院靠谱
成都犀浦附近哪儿的男科医院好?  }

  hub里面的内容,我先讲解一下:

  我们首先创建一个SendStreamInit的方法,来开启所有的客户端订阅.

  也就是调用客户端的 streamStarted 方法.

  然后客户端的streamStarted 方法来订阅我们的StartStreaming,

  StartStreaming里面创建一个观察者,来观察一个序列,每一秒发送一个内容,循环10次

  然后,我们在Startup中注册我们添加的hub,如下:

  public void Configure(IApplicationBuilder app, IHostingEnvironment env)

  {

  if (env.IsDevelopment())

  {

  app.UseDeveloperExceptionPage();

  }

  app.UseFileServer();

  //注册hub

  app.UseSignalR(routes =>

  {青羊区治疗阴茎短小哪家男科医院好?
青羊区处女膜修复哪家医院好?
成都武侯区做阴唇整形哪里的医院靠谱
成都犀浦附近哪儿的男科医院好?
成都郫县附近有正规人流医院吗
成都武侯区哪个医院治疗早泄疾病好
成都新都哪家男科医院治疗前列腺炎好
治疗包茎成都华阳哪家医院好
成都郫县做阴茎延长的医院  routes.MapHub("streaming");

  });

  }

  接下来,实现我们的客户端JS,如下:

  //设置连接方式

  //var transport = signalR.TransportType.WebSockets;

  var transport = signalR.TransportType.LongPolling;

  //创建连接

  var connection = new signalR.HubConnection(`http://${document.location.host}/streaming`, { transport: transport });

  //获取按钮

  var button = document.getElementById("startStreaming");

  //注册订阅方法

  function startStreaming(){

  connection.stream("StartStreaming").subscribe({

  next: onStreamReceived,

  err: function(err){

  console.log(err);

  },

  complete: function(){

  console.log("完成流传输");

  }

  });

  }

  //注册开启注册的方法

  connection.on("streamStarted", function(){

  startStreaming();

  });

  //添加按钮事件,调用初始化订阅的方法

  button.addEventListener("click", event => {

  connection.invoke("sendStreamInit");

  });

  //展示订阅得到的消息

  function onStreamReceived(data){

  console.log("收到消息: " + data);

  var liElement = document.createElement('li');

  liElement.innerHTML = '' + "收到消息" + ': ' + data;

  document.getElementById('discussion').appendChild(liElement);

  }

  //开启连接

  connection.start();