Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用接收SignalR广播消息?

如何使用接收SignalR广播消息?
EN

Stack Overflow用户
提问于 2014-09-26 12:17:44
回答 1查看 12.5K关注 0票数 7

我需要将消息从ASP.NET服务器推送到安卓设备,以便在更改记录状态时发出通知。因此,我想使用新的客户端--来自SignalR的GitHub,使用和Java。

我对Java和SignalR很陌生。我让SignalR集线器和JavaScript客户端在HTML中工作,它可以发送和接收消息。但我无法进入下一步,让Java客户机在Eclipse/Java/Android中工作。我不知道如何登记以接收广播信息。当我使用HTML/JavaScript页面发送消息时,我不会在Android应用程序、模拟器和Eclipse中接收消息。我能

我设置了以下ASP.NET SignalR Hub.cs文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    using Microsoft.AspNet.SignalR.Hubs;
    using System.Threading.Tasks;

    public class PtThroughputHub : Hub
    {
        public void SendAll(string message)
        {
            Clients.All.broadcastMessage(message);
        }
        public void SendGroup(string groupName, string message)
        {
            Clients.Group(groupName).broadcastMessage(message);
        }
        public Task JoinGroup(string groupName)
        {
            return Groups.Add(Context.ConnectionId, groupName);
        }
        public Task LeaveGroup(string groupName)
        {
            return Groups.Remove(Context.ConnectionId, groupName);
        }
    }

在JavaScript中,我还可以使用从ASP.NET Hub.cs自动生成的Hubs.js文件通过集线器发送和接收消息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="Scripts/jquery-2.1.0.min.js"></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.0.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>    

$(function () {
    $.connection.hub.logging = true;

    // Declare a proxy to reference the hub.
    var ptThroughput = $.connection.ptThroughputHub;
    // Create a function that the hub can call to broadcast messages.
    ptThroughput.client.broadcastMessage = function (message) {
        alert(message);
    };

    // Start the connection.
    $.connection.hub.start()
        .done(function () {
                    alert('Successfully connected as ' + $.connection.hub.id);
                    ptThroughput.server.joinGroup("Group1");
                    $('#btnSend').click(function () {
                        // Call the Send method on the hub.
                        ptThroughput.server.sendGroup('Group1', 'My Message Test Here!');                        
                    })
                })
                .fail(function () { $("#connection").text('Can not connect to SignalR hub!'); });

});

但是,在Eclipse/Java/Android中,我不确定需要使用什么代码来接收广播消息。我能够启动连接并在下面的代码示例末尾接收到一个connectionID,但是我被困在那里了。我是否需要以某种方式使用.on()或.subscribe()?当我运行这段代码时,我看到一个记录的连接ID,但是我无法从html/JavaScript页面触发广播消息。什么都没有收到,我在任何地方都没有错误。有人知道我在这里可能错过了什么吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import microsoft.aspnet.signalr.client.SignalRFuture;
import microsoft.aspnet.signalr.client.hubs.HubConnection;
import microsoft.aspnet.signalr.client.hubs.HubProxy;
import microsoft.aspnet.signalr.client.hubs.SubscriptionHandler;

//Setup connection
String server = "http://Servername/Applications/ThroughputMobile/";
HubConnection connection = new HubConnection(server);
HubProxy proxy = connection.createHubProxy("ptThroughputHub");


//--HERE IS WHERE I AM NOT SURE HOW TO SET IT UP TO RECEIVE A NOTIFICATION---
//Setup to receive broadcast message
proxy.on("broadcastMessage",new SubscriptionHandler() {         
    @Override
    public void run() { 
        Log.i("Test Message", "broadcastMessage received..."); 
    }
});
//---------------------------------------------------------------------------

//Start connection
SignalRFuture<Void> awaitConnection = connection.start();
try {
    awaitConnection.get();
} catch (InterruptedException e) {

//Log Connection ID
Log.i("Test Message", "Connection ID = " + connection.getConnectionId());

因此,我是否使用proxy.on()来设置接收广播通知或其他什么?我传递给这个方法的字符串是什么?"broadcastMessage“还是"sendAll”在我的例子中?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2014-10-02 06:32:11

我没有从问题中显示的JoinGroup()集线器调用SignalR方法。您需要加入集线器才能接收到广播,这是有意义的。因此,在我的后台服务onStart()中,我打电话给invoke("JoinGroup", "Group1")。然后调用on()方法来设置接收到的消息的处理程序。Group1是集线器用来分割广播的可配置组名,以便不同的组可以使用相同的集线器。请参阅下面的完整代码和注释解决方案块。希望这能节省一些时间!

下面是帮助我编写完整Android后台服务代码的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Invoke JoinGroup to start receiving broadcast messages            
proxy.invoke("JoinGroup", "Group1");

//Then call on() to handle the messages when they are received.        
proxy.on( "broadcastMessage", new SubscriptionHandler1<String>() 
{
  @Override
  public void run(String msg) {
      Log.d("result := ", msg);                 
  }
}, String.class);

以下是完整的Android后台服务代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.concurrent.ExecutionException;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
import microsoft.aspnet.signalr.client.*;
import microsoft.aspnet.signalr.client.hubs.*;

public class NotifyService extends Service {

    @Override
    public void onCreate() {
        super.onCreate();       
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onStart(Intent intent, int startId) {      
            super.onStart(intent, startId);       
            Toast.makeText(this, "Service Start", Toast.LENGTH_LONG).show();       

        String server = "http://Servername/Applications/ThroughputMobile/";
            HubConnection connection = new HubConnection(server);
            HubProxy proxy = connection.createHubProxy("ptThroughputHub");

            SignalRFuture<Void> awaitConnection = connection.start();
            try {
                awaitConnection.get();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ExecutionException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }          

        //--HERE IS MY SOLUTION-----------------------------------------------------------
        //Invoke JoinGroup to start receiving broadcast messages            
        proxy.invoke("JoinGroup", "Group1");

        //Then call on() to handle the messages when they are received.        
            proxy.on( "broadcastMessage", new SubscriptionHandler1<String>() {
                @Override
                public void run(String msg) {
                    Log.d("result := ", msg);                   
                }
            }, String.class);

        //--------------------------------------------------------------------------------
    }
    @Override
    public void onDestroy() {
       super.onDestroy();       
    }   
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26067685

复制
相关文章
基于 Redis 实现 Laravel 广播功能(中):引入 Laravel Echo 接收广播消息
上篇教程我们完成了广播系统的后端配置和事件分发,并探究了底层源码的实现,最终落地的都是通过 Redis 发布命令发布消息。
学院君
2021/01/08
3.8K0
接收广播系统
New - > Other ->Broadcast Reciver 新建一个BootCompleteReceiver:
Dream城堡
2018/12/14
1.3K0
SpringBoot webSocket实现发送广播、点对点消息和Android接收
这篇文章主要介绍了SpringBoot webSocket实现发送广播、点对点消息和Android接收,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
java思维导图
2018/12/05
3.9K0
注册广播接收器registerReceiver
从registerReceiver(BroadcastReceiver receiver,IntentFilter filter)出发
全栈程序员站长
2022/11/17
1.1K0
android广播注册方式_安卓广播接收器
前面分析了Android系统的广播机制,从本质来说,它是一种消息订阅/发布机制。因此,使用这种消息驱动模型的第一步便是订阅消息;而对Android应用程序来说,订阅消息其实就是注册广播接收器。
全栈程序员站长
2022/10/01
1K0
[android] 短信的广播接收者
在<activity/>节点设置屏幕朝向属性,android:screenOrientation=”landscape”
唯一Chat
2019/09/10
2.5K0
tron 接收交易和广播交易
分析tron是如何接收到交易,并在接收到交易后,后续是如何处理的,交易处理细节可以看看:tron 交易处理--交易执行逻辑
潇洒
2023/10/20
4760
如何正确接收 GitHub 的消息邮件
我厂的开发流程通常都是基于 GitHub 的。在 GitHub 上 review 代码,也是我日常工作的重要组成部分。对我来说,在 code review 过程中最讨厌的莫过于,我在 pull request 或 commit 下面评论或 @ 人,往往石沉大海,没有回音。我事后追问当事人,他们的回复往往是 “不知道你 @ 我了呀~”。
用户8705050
2021/06/08
1.5K0
udp发送广播消息
import socket if __name__ == '__main__': # 创建udpsocket udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 设置socket选项, 开启发送广播消息的功能 # 1. SOL_SOCKET:当前socket # 2. SO_BROADCAST: 广播选项 # 3. True:开启发送广播消息功能 udp_socket.set
汪凡
2019/03/01
2.7K0
[android] 代码注册广播接收者&利用广播调用服务的方法
利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光
唯一Chat
2019/09/10
1K0
SignalR实现网页实时聊天功能
SignalR是利用html5 sokit方式实现网页的实时性,在客户端不支持html5的情况下通过轮询实现
FreeTimeWorker
2020/08/31
2.4K0
SignalR实现网页实时聊天功能
EarthChat SignalR原理讲解
SignalR 是 Microsoft 开发的一个库,用于 ASP.NET 开发人员实现实时 web 功能。这意味着服务端代码可以实时地推送内容到连接的客户端,而不需要客户端定期请求或轮询服务器以获取新数据。SignalR 可以用于各种应用程序,如实时聊天、通知、实时数据更新等。
用户10786849
2023/10/13
2360
EarthChat SignalR原理讲解
Android基础总结(4)——广播接收器
  在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的。Android提供了一整套完整的API,允许应用程序自由地发送和接收广播。发送广播就是借助之前了解过的Intent,接收广播则需要用到广播接收器(Broadcast Receiver)。. 1、广播的类型 标准广播:Normal broadcast,是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因
mukekeheart
2018/02/27
1.1K0
Asp.Net Core SignalR 与微信小程序交互笔记
Asp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给Web客户端。
脑洞的蜂蜜
2018/08/13
3.6K0
广播的注册、发送和接收过程
1)静态注册在应用安装时由PackageManagerService来完成注册过程
用户3112896
2019/09/26
9610
基于 Redis 实现 Laravel 广播功能(下):在私有频道和存在频道发布和接收消息
在上面的示例广播事件 UserSignedUp 中,我们通过 Channel 定义了一个公共频道广播,即所有客户端都可以接收到这个事件消息:
学院君
2021/01/08
3.2K0
使用 Spring Cloud Bus 向所有微服务广播消息
Spring Cloud Bus 是 Spring Cloud 微服务框架中的一个组件,可以用于在微服务之间广播消息,从而实现微服务之间的协调和通信。
堕落飞鸟
2023/04/18
1.4K2
Spring Boot 中使用@KafkaListener并发批量接收消息[通俗易懂]
kakfa是我们在项目开发中经常使用的消息中间件。由于它的写性能非常高,因此,经常会碰到读取Kafka消息队列时拥堵的情况。遇到这种情况时,有时我们不能直接清理整个topic,因为还有别的服务正在使用该topic。因此只能额外启动一个相同名称的consumer-group来加快消息消费(如果该topic只有一个分区,再启动一个新的消费者,没有作用)。
全栈程序员站长
2022/11/04
4.6K0
Spring Boot 中使用@KafkaListener并发批量接收消息[通俗易懂]
mqttnet消息推送与接收[通俗易懂]
@echo.请稍等,MqttNetServiceAddUserAndPassword服务安装启动中………… @echo off @title 安装windows服务:MqttNetServiceAddUserAndPassword @sc create MqttNetServiceAddUserAndPassword binPath=”%~dp0\MqttNetServiceAddUserAndPassword.exe” @sc config MqttNetServiceAddUserAndPassword start= auto @sc start MqttNetServiceAddUserAndPassword @echo.MqttNetServiceAddUserAndPassword启动完毕 pause
全栈程序员站长
2022/09/12
1.2K0
mqttnet消息推送与接收[通俗易懂]
点击加载更多

相似问题

SignalR如何广播消息?

12

使用SignalR广播消息的超时

11

如何使用SignalR客户端C#从集线器类接收广播消息?

11

接收广播消息

21

如何防止接收广播消息

217
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文