精华内容
下载资源
问答
  • 通过百度云推送官网的创建通知来推送消息,手机客户端可以...后台显示是推送成功,android客户端能收到后天推送消息。 联系百度云推送客服没有回应,想知道这是手机客户端的问题,还是公司后台的问题,还是SDK的问题
  • //调用广播方法推送消息到客户端 Clients.All.broadcastMessage(receiver, sender, message); } } } 步骤2: 添加Startup.cs类,如下: Startup.cs代码: using System; using System.Threading....

    1.先来看一下成果:

    打开多个客户端,输入不同的用户名:

    用xuanwuziyou用户给pet用户发送消息,点击发送之后,pet用户即收到新消息弹出提示:


    2.技术:Asp.net的SignalR,详情见官网  http://www.asp.net/signalr
    http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20
    使用环境:VS2013 WebForm项目。
    3.新建一个WebApplication的空项目,项目结构:


    4.步骤1:添加ChatHub.cs类,如下:


    ChatHub.cs代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Microsoft.AspNet.SignalR;
    
    namespace SignalRChat
    {
        public class ChatHub : Hub
        {
    
            public void SendEmail(string receiver, string sender, string message)
            {
                //调用广播方法推送消息到客户端
                Clients.All.broadcastMessage(receiver, sender, message);
            }
        }
    }
    步骤2: 添加Startup.cs类,如下:

    Startup.cs代码:

    using System;
    using System.Threading.Tasks;
    using Microsoft.Owin;
    using Owin;
    
    [assembly: OwinStartup(typeof(SignalRChat.Startup))]
    
    namespace SignalRChat
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                // Any connection or hub wire up and configuration should go here
                app.MapSignalR();
            }
        }
    }

    添加上这两个类,那么项目所需要的Scripts文件和引用就会自动添加进来。

    步骤3:添加一个Html页叫做“邮件通知.html”,内容如下:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>邮件通知</title>
        <script src="Scripts/jquery-1.10.2.min.js"></script>
        <script src="/Scripts/jquery.signalR-2.0.0.js"></script>
        <script src="/signalr/hubs"></script>
        <script>
            var username;
            $(function () {
                $("#notify").hide();
    
                $("#submit").click(function () {
                    username = $("#username").val();
                    $("#tishi").html("当前用户: " + username);
                    $("#shuru").hide();
                    $("#username").hide();
                    $("#submit").hide();
                });
    
                var chat = $.connection.chatHub;
                chat.client.broadcastMessage = function (receiver, sender, message) {//显示从服务端收到的信息
                    if (username == receiver) {
                        $("#sender").text(sender);
                        $("#receiveMsg").text(message);
                        $("#notify").slideDown();
                    }
                };
    
                $.connection.hub.start().done(function () {//发送信息到服务端
    
                    $('#sendmsg').click(function () {
                        chat.server.sendEmail($("#receiver").val(), username, $("#msg").val());
                    });
    
                });
    
                $("#cancle").click(function () {
                    $("#notify").slideUp();
                });
            });
        </script>
    </head>
    <body>
        <h1>邮件通知</h1>
        <label id="shuru">请输入用户名:</label>
        <input type="text" id="username" />
        <input type="button" id="submit" value="确定" />
        <br /><label id="tishi"></label>
        <hr />
    <div>
        收件人:<input type="text" id="receiver" />
        <br />内容:<input type="text" id="msg" />
        <br /><br /><input type="button" id="sendmsg" value="发送"/>
    </div>
    
        <p></p>
        <div id="notify" style="width:300px;height:140px;float:right;margin-bottom:10px;border:solid;background-color:yellow;">
            <br />
            <br />
            新消息来自:  <span id="sender"></span><br />
            内容:<span id="receiveMsg"></span>
            <br /><br /><br />
            <input type="button" id="cancle" value="我知道啦" style="float:right"/>
        </div>
    
    </body>
    </html>
    
    5.然后就可以生成项目并运行了。

    6.讲解:ChatHub.cs中的SendEmail(string receiver, string sender, string message)方法由我们自己编写,

    这个方法在前端的javascript中被调用了:

    $.connection.hub.start().done(function () {//发送信息到服务端
    
                    $('#sendmsg').click(function () {
                        chat.server.sendEmail($("#receiver").val(), username, $("#msg").val());
                    });
    
                });
    只是把SendEmail调用时写作sendEmail,即第一个字母小写。这个方法在当singalr准备好之后,
    在前端调用后台的方法把数据广播出去。

    chat.client.broadcastMessage = function (receiver, sender, message) {//显示从服务端收到的信息
                    if (username == receiver) {
                        $("#sender").text(sender);
                        $("#receiveMsg").text(message);
                        $("#notify").slideDown();
                    }
                };
    这个方法,正是客户端收到了服务器广播发来的数据之后调用的方法,收到的参数正是我们在
    SendEmail中规定传送的参数。本程序中把收到的信息弹出给相应的用户。

    就这样,实现了信息的实时推送,也就是服务器端主动向客户端推送消息的方式。结束。

    展开全文
  • 结果却发现客户端接收不到消息推送。过程中发现开发模式消息推送很正常。生产环境下我打印出deviceToken单播也是正常的。但是使用我们自己服务器发送就有问题了。断定是deviceToken和服务器对接的问题,但是...

    使用企业账号发布了一个应用程序。结果却发现客户端接收不到消息推送。过程中发现开发模式消息推送很正常。生产环境下我打印出deviceToken单播也是正常的。但是使用我们自己服务器发送就有问题了。

    断定是deviceToken和服务器对接的问题,但是deviceToken单播都可以难道是服务器对接有问题?又果断试了一下其他可以正常发送消息的deviceToken,发现很正常。

    后来在友盟论坛看到以下让我哭笑不得的话

    1. 友盟目前为了提高广播的筛选的效率,Device_token入库有一天的延时。该延时不会影响单播, 所以特别是刚上线第一天的app,就不要纠结生产环境的Device_token为什么都是无效的,因为现有的基本全是开发环境的。
    2. 友盟后台会在下一个版本里面在【工具】模块中加入一个新的功能,方便开发者能够自行查询Device_token是不是无效的。被判定为无效的Device_token可以手动删除, 这样无效以后可以再重新测试,如果立马又变成无效的,这种情况就会是上面说的是苹果判定的无效,反之是被友盟标记的无效。

    等着看吧。

    展开全文
  • 示例 php后端及时推送消息客户端 原理: 1、建立一个websocket Worker,用来维持客户端长连接 2、websocket Worker内部建立一个text Worker 3、websocket Worker 与 text Worker是同一个进程,可以方便的共享...

    示例 php后端及时推送消息给客户端
    原理:
     
    1、建立一个websocket Worker,用来维持客户端长连接
     
    2、websocket Worker内部建立一个text Worker
     
    3、websocket Worker 与 text Worker是同一个进程,可以方便的共享客户端连接
     
    4、某个独立的php后台系统通过text协议与text Worker通讯
     
    5、text Worker操作websocket连接完成数据推送
     
    代码及步骤
     
    push.php
     
    <?php
    use Workerman\Worker;
    require_once './Workerman/Autoloader.php';
    // 初始化一个worker容器,监听1234端口
    $worker = new Worker('websocket://0.0.0.0:1234');//
     
    /*
     * 注意这里进程数必须设置为1,否则会报端口占用错误
     * (php 7可以设置进程数大于1,前提是$inner_text_worker->reusePort=true)
     */
    $worker->count = 1;
    // worker进程启动后创建一个text Worker以便打开一个内部通讯端口
    $worker->onWorkerStart = function($worker)
    {
        // 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符
        $inner_text_worker = new Worker('text://0.0.0.0:5678');
        $inner_text_worker->onMessage = function($connection, $buffer)
        {
            // $data数组格式,里面有uid,表示向那个uid的页面推送数据
            $data = json_decode($buffer, true);
            $uid = $data['uid'];
            // 通过workerman,向uid的页面推送数据
            $ret = sendMessageByUid($uid, $buffer);
            // 返回推送结果
            $connection->send($ret ? 'ok' : 'fail');
        };
        // ## 执行监听 ##
        $inner_text_worker->listen();
    };
    // 新增加一个属性,用来保存uid到connection的映射
    $worker->uidConnections = array();
    // 当有客户端发来消息时执行的回调函数
    $worker->onMessage = function($connection, $data)
    {
        global $worker;
        // 判断当前客户端是否已经验证,既是否设置了uid
        if(!isset($connection->uid))
        {
           // 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
           $connection->uid = $data;
           /* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
            * 实现针对特定uid推送数据
            */
           $worker->uidConnections[$connection->uid] = $connection;
           return;
        }
    };
     
    // 当有客户端连接断开时
    $worker->onClose = function($connection)
    {
        global $worker;
        if(isset($connection->uid))
        {
            // 连接断开时删除映射
            unset($worker->uidConnections[$connection->uid]);
        }
    };
     
    // 向所有验证的用户推送数据
    function broadcast($message)
    {
       global $worker;
       foreach($worker->uidConnections as $connection)
       {
            $connection->send($message);
       }
    }
     
    // 针对uid推送数据
    function sendMessageByUid($uid, $message)
    {
        global $worker;
        if(isset($worker->uidConnections[$uid]))
        {
            $connection = $worker->uidConnections[$uid];
            $connection->send($message);
            return true;
        }
        return false;
    }
     
    // 运行所有的worker
    Worker::runAll();
    启动后端服务 php push.php start -d
     
    前端接收推送的js代码
     
    var ws = new WebSocket('ws://127.0.0.1:1234');
    ws.onopen = function(){
        var uid = 'uid1';
        ws.send(uid);
    };
    ws.onmessage = function(e){
        alert(e.data);
    };
    后端推送消息的代码
     
    // 建立socket连接到内部推送端口
    $client = stream_socket_client('tcp://127.0.0.1:55151', $errno, $errmsg, 1);
    // 推送的数据,包含uid字段,表示是给这个uid推送
    $data = array('uid'=>'uid1', 'percent'=>'88%');
    // 发送数据,注意55151端口是Text协议的端口,Text协议需要在数据末尾加上换行符
    fwrite($client, json_encode($data)."\n");
    // 读取推送结果
    echo fread($client, 8192);
     
    后端推送消息的代码和push.php监听同一个端口
    push.php和前端监听同一个websocket端口
    通过后端推送消息的代码向push.php推送数据,
    push.php接受到数据后通过处理 利用websocket往前端推送数据

    展开全文
  • 如何实现服务器后台数据有更新的时候 自动推送到android客户端
  • 在数据库中的某些数据变化之后,服务器中代码会不断对轮询相关的表,在有查询结果之后,需要推送到指定的客户端。 以上的功能要怎么实现?希望有好的建议! 之前只是接触PB客户端主动的调用服务器中的接口,这个...
  • 难点:Netty建立长链接

    方式1:Netty建立长链接

    方式2:mqtt协议,利用emqx搭建mqtt服务器,android端利用paho.mqtt.android

    展开全文
  • 用WebSocket,WebWorker和requestAnimationFrame如何实现服务端定时推送随机数到客户端
  • 我现在想每成功导入一个就推送到前台显示已经导入成功,直到全部导入自动结束推送。 看了聊天室代码,消息推送都是靠前端js+event.php,我想直接在php里面不需要onMessage触发. 我从下午看到现在文档,也看...
  • websocket后台客户端成功推送前端
  • pushlet 服务器主动推送数据到客户端

    千次阅读 2012-11-29 16:40:39
    最近一个项目有个需求,需要实时的在页面上显示数据,想在服务端直接推送到页面上,上网查了一下,查了这个pushlet框架,资料特别少,大部分都是COPY且不能用,特整理出来(亲测)。  首先列出所依赖文件(网上...
  • 通常情况下,打开网页或app去查询或者刷新时,客户端向服务器发出请求然后返回数据,客户端与服务端对应的模式是: ...服务端把消息哪,客户端又不像服务器有一个固定的地址服务端主动推送到客户端是怎么一个过...
  • 而服务端主动推送到客户端是怎么一个过程呢? (特别不明白应用服务器如何确定每一个应用所在的设备,服务端把消息哪?客户端又不像服务器有一个固定的地址) 各位大神的意思是:现在的app,仍然是以客户端...
  • 图文等内容参考链接... WebSocket 简介 ... webSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在webscoket API中,浏览器和服务器只需...
  • 最近接友盟推送,文档超简单,本来就几分钟能完成的事情,结果断断续续搞了好几天,期间踩的坑,现在回想起来真的好可笑,完全可以避免的。不过在此也对友盟的客服以及技术点个赞,真的很耐心,尽管提交工单,他们提...
  • 服务器主动推送消息数据给客户端

    万次阅读 2019-02-11 15:17:14
    这个问题第一次是我在实现一个导师的方案的时候所发现的,一开始我需要实现服务器与客户端的密钥协商和数据传递,服务器需要主动分发(推送)密钥给客户端,因为以前没有做过相关编码,后来只能想到用反向连接,也...
  • 文章目录1. ==AJAX轮询==2. iframe3. comet长轮询(long polling...通常情况下,打开网页或app去查询或者刷新时,客户端向服务器发出请求然后返回数据,客户端与服务端对应的模式是: 客户端请求–服务端响应, 而在有些...
  • 服务端,再推送客户端,怎么实现? SocketIO不xaingsocket,得通过http请求访问服务端,网上鲜有这样的例子,后台应该也是通过http连接服务端,但是怎么推消息到服务端,有没有 例子,Netty-SocketIO应该具备了这...
  • 使用Pushlet来实现服务器端向客户端推送信息 1. 实现方式: 有两种实现方式: 1. 通过配置文件来实现定时的从服务器端向客户端推送信息 2. 通过API主动向另外一端推送信息    以下分别给予介绍。 2. 特别...
  • websocket后台自动推送消息

    千次阅读 热门讨论 2016-08-24 16:03:37
    websocket后台自动推送消息目前网上实现的都是客户端与服务端双向通信的例子。例如聊天室。之前做项目遇到这样的问题:客户端仅仅负责接收服务器后台数据,不做发送,这样如何实现呢? 其实实现的方法很简单: 第...
  • 客户端直接向推送服务方发送Http请求 项目服务器通过Http转发推送请求至推送服务方 项目服务端使用SDK进行功能集成 关于推送的种类概述 android客户端初步实现 集成SDK说明 集成步骤 1下载官方提供的SDK集成包 2手动...
  • Maven添加依赖 <!--极光推送--> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>...
  • 需求:项目测试,缺少用户登录失败给admin推送消息,想到这个方式,当用户登录失败时,admin用户会在页面看到咣咣乱弹的alert. 正文 pom.xml <!-- webSocket 开始--> <dependency> <groupId>...
  • 服务器主动向客户端推送消息-java之comet4j实现

    万次阅读 热门讨论 2017-02-03 21:19:26
    而有些场景是需要在服务端有 相关信息更新时,主动向客户端推送该信息。实现这种模型现已有相关的框架。本博客将介绍comet4j实现web方式的推送! 本博文将简单介绍两个demo,其中一个是时钟,一个是简单数字变化。...
  • Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用推送,写这个系列真的很要命,你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,004
精华内容 16,801
关键字:

后台推送消息到客户端