android 配置signalR与服务器连接通信

android 配置signalR与服务器连接通信
这几天公司项目需要使用signalR来进行与服务器的实时通讯连接,于是,上网百度了很多相关的资料,但是有用的信息很少,可能也是自己不会搜索吧,最后还是自己根据一个项目的例子慢慢弄懂了大致的流程,在进行搜索的时候,会出现一个词signalA,这是基于signalR实现的一个推送框架,具体里面要怎么做,我也没有详细了解。
ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程。实时
Web 功能是指这样 一种功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求
新的数据。
--引用 百度百科
下面就先介绍一下signalR的配置吧。
1、首先先下载signalR相关的jar包,链接地址:点击打开链接
     下载jar后,将其导入你的项目中,也就是拷贝到libs里面,如下图:


查看 app中的build.guild的dependencies里面添加了如下图所示,则依赖成功

2、在这里先介绍几个重要的变量:
(1) serverUrl,服务器的地址,需要与服务器那边对接,怎么可能少得了这个地址呢。
(2) HubConnection类和 HubProxy类,在与服务器进行连接的时候是少不了这两个类的,这两个类的初始化如下:
		mHubConnection = new HubConnection(serverUrl);
		mHubProxy= mHubConnection.createHubProxy(SERVER_HUB_CHAT);
	  其中SERVER_HUB_CHAT 是一个字符串,需要与服务器那边名称相对应,一般SERVER_HUB_CHAT  = “ServerHub
	  (3)HubProxy类中的两个方法:invoke()和subscribe()
	   invoke()方法主要是客户端这边去调用服务器那边的方法,其调用时的方法名称必须与服务器端的要一致。例子如下:
	
mHubProxy.invoke("服务器端的方法名称","参数1", "参数2");
	   invoke()方法的原型如下,其参数可以无限添加
 		public SignalRFuture<Void> invoke(String method, Object... args) {
      	  return this.invoke((Class)null, method, args);
   	 }



	subscribe()方法则是让服务器端调用客户端这边的方法,其调用时的方法名称必须与服务器端的一致。例子如下:
 	
mHubProxy.subscribe("方法名[服务器端调用客户端方法的名称]").addReceivedHandler(
                new Action<JsonElement[]>() {

                    @Override
                    public void run(JsonElement[] obj)//服务端传回来的数据
                            throws Exception {
                        Log.i("hub", "ffffffff"+obj[0].toString()+"长度:"+obj.length);
                        Log.i("hub", "ffffffff"+obj[1].toString()+"长度:"+obj.length);
                        Log.i("hub", "ffffffff"+obj[2].toString()+"长度:"+obj.length);
                        Log.i("hub", "ffffffff"+obj[3].toString()+"长度:"+obj.length);
                        if (obj.length > 3) {
                            String data = obj[2].toString();
                            Log.i("hub", obj[2].toString());
                        }

                    }
                });




该方法的原型如下所示:
 public Subscription subscribe(String eventName) {
        this.log("Subscribe to event " + eventName, LogLevel.Information);
        if(eventName == null) {
            throw new IllegalArgumentException("eventName cannot be null");
        } else {
            eventName = eventName.toLowerCase(Locale.getDefault());
            Subscription subscription;
            if(this.mSubscriptions.containsKey(eventName)) {
                this.log("Adding event to existing subscription: " + eventName, LogLevel.Information);
                subscription = (Subscription)this.mSubscriptions.get(eventName);
            } else {
                this.log("Creating new subscription for: " + eventName, LogLevel.Information);
                subscription = new Subscription();
                this.mSubscriptions.put(eventName, subscription);
            }

            return subscription;
        }
    }
3、具体详细的步骤就先不说了,还是直接运行例子会比较好理解
signalR项目的链接:项目demo

注意:如果运行这个项目的例子后有个空指针的bug,就是MainActivity中的两个变量出问题,mHubProxy和mHubConnection,这两个变量没有赋值。至于为什么没有赋值是因为在startSignalR()这个方法中又定义了局部变量connection和proxy,所以应该将下图中的

换成下图:



即可。





















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值