精华内容
下载资源
问答
  • 基于SPring4+的WebSocket 主动推送 可以通过登录者账号 主动推送给 指定账号
  • django+WebSocket主动推送数据到前端 一旦web服务器和客户端之间建立起websocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发下哦那个JSON、XML、HTML或者图片等任意格式的数据。 ...

    django+WebSocket主动推送数据到前端

    • 一旦web服务器和客户端之间建立起websocket协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发下哦那个JSON、XML、HTML或者图片等任意格式的数据。
    • 由于是建立在HTTP协议的基础上,因此连接的发起方仍是客户端,而一旦确立websocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。
    • websocket协议的主要特点:
      • 推送功能
        • 支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
      • 减少通信量
        • 只要建立起websocket连接,就希望一直保持连接状态。和HTTP相比,不但每次连接时的总开销减少,而且由于websocket的首部信息很小,通信量也响应减少了。
          在这里插入图片描述
          成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数据帧,而采用 WebSocket 独立的数据帧。

    Django实现后端主动推送数据到前端

    安装dwebsocket库

    pip install dwebsocket 
    

    settings.py

    INSTALLED_APPS = [
      、、、、、、
        'dwebsocket'
        、、、、、、
    ]
    

    views.py

    from dwebsocket.decorators import accept_websocket
    @accept_websocket
    def connect(request):
        if request.is_websocket():  # 如果请求是websocket请求:
           #获取前端传来的值
           msg=request.websocket.wait()
           dict={}#自己设定要传到前端的字典值
           json.dumps(dict,ensure_ascii=False)
           #返回值到前端,这个操作只要连接还在就可以不断的向前端传值
    
    展开全文
  • WebSocket.jpegWebsocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。这里我们用TP5.1框架结合Workerman来做演示首先用Composer下载TP5.1框架...

    67c320d19814

    WebSocket.jpeg

    Websocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。

    这里我们用TP5.1框架结合Workerman来做演示

    首先用Composer下载TP5.1框架

    composer create-project topthink/think=5.1.* tp5 --prefer-dist

    下载完成后再在项目目录下通过 composer 引入 workerman

    composer require topthink/think-worker

    等完成后就可以在 vendor 目录里看到 workerman

    注意:本人环境CentOS7,TP5.1框架,PHP版本5.6.0

    然后在项目的根目录下新建一个 start.php 文件,用于启动WebSocket服务。

    use Workerman\Worker;

    require_once __DIR__ . '/vendor/workerman/workerman/Autoloader.php';

    // 创建一个Worker监听2345端口,使用websocket协议通讯

    $http_worker = new Worker("websocket://0.0.0.0:2345");

    // 这里进程数必须设置为1

    $http_worker->count = 1;

    // 接收到浏览器发送的数据时广播给所有用户

    $http_worker->onMessage = function($connection, $data)use($http_worker)

    {

    // 向每一个用户推送消息

    foreach($http_worker->connections as $connection)

    {

    //验证管理端秘钥

    $text = explode("KEY:", $data);

    if($text[1]=='gi4lXpAOw6ddtFg'){

    $connection->send($text[0]);

    }

    }

    };

    Worker::runAll();

    在根目录下打开命令行工具以daemon(守护进程)方式启动

    php start.php start -d

    下面是管理端广播消息页面的一张截图

    67c320d19814

    WX20180821-144140.png

    管理端js代码如下

    var ws = new WebSocket("ws://47.94.222.65:2345");

    ws.onopen = function(evt) {

    console.log("连接成功");

    };

    $('#send').click(function(){

    var text = $('#text').val() + 'KEY:gi4lXpAOw6ddtFg';

    ws.send(text);

    });

    微信小程序端接收推送演示

    67c320d19814

    WX20180821-155230.png

    微信小程序端代码

    wx.connectSocket({

    url: 'ws://47.94.222.65:2345'

    })

    wx.onSocketOpen(function (res) {

    console.log('WebSocket连接已打开!')

    })

    wx.onSocketMessage(function (res) {

    console.log('收到服务器内容:' + res.data)

    })

    展开全文
  • <div><p>文档找了一圈没有发现 可以根据用户的 fd 使用websocket 主动推送消息的方法 类似于 mix框架中的 app()->ws->push($data);</p><p>该提问来源于开源项目:hyperf/hyperf</p></div>
  • Websocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。这里我们用TP5.1框架结合Workerman来做演示首先用Composer下载TP5.1框架composer create...

    Websocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。

    这里我们用TP5.1框架结合Workerman来做演示

    首先用Composer下载TP5.1框架

    composer create-project topthink/think=5.1.* tp5 --prefer-dist

    下载完成后再在项目目录下通过 composer 引入 workerman

    composer require topthink/think-worker

    等完成后就可以在 vendor 目录里看到 workerman

    注意:本人环境CentOS7,TP5.1框架,PHP版本5.6.0

    然后在项目的根目录下新建一个 start.php 文件,用于启动WebSocket服务。

    use Workerman\Worker;

    require_once __DIR__ . '/vendor/workerman/workerman/Autoloader.php';

    // 创建一个Worker监听2345端口,使用websocket协议通讯

    $http_worker = new Worker("websocket://0.0.0.0:2345");

    // 这里进程数必须设置为1

    $http_worker->count = 1;

    // 接收到浏览器发送的数据时广播给所有用户

    $http_worker->onMessage = function($connection, $data)use($http_worker)

    {

    // 向每一个用户推送消息

    foreach($http_worker->connections as $connection)

    {

    //验证管理端秘钥

    $text = explode("KEY:", $data);

    if($text[1]=='gi4lXpAOw6ddtFg'){

    $connection->send($text[0]);

    }

    }

    };

    Worker::runAll();

    在根目录下打开命令行工具以daemon(守护进程)方式启动

    php start.php start -d

    下面是管理端广播消息页面的一张截图

    5c62e6c17e6fc4c942665235f2296a65.png

    管理端js代码如下

    var ws = new WebSocket("ws://47.94.222.65:2345");

    ws.onopen = function(evt) {

    console.log("连接成功");

    };

    $('#send').click(function(){

    var text = $('#text').val() + 'KEY:gi4lXpAOw6ddtFg';

    ws.send(text);

    });

    微信小程序端接收推送演示

    b590434e9e5ee961424dcff7eb8727eb.png

    WX20180821-155230.png

    微信小程序端代码

    wx.connectSocket({

    url: 'ws://47.94.222.65:2345'

    })

    wx.onSocketOpen(function (res) {

    console.log('WebSocket连接已打开!')

    })

    wx.onSocketMessage(function (res) {

    console.log('收到服务器内容:' + res.data)

    })

    也可以看看GoEasy文库的其他资料。

    展开全文
  • 背景最近,公司在开发一款主动服务机器人,将产生的消息数据通过服务端推送到客户端(H5、iOS、Android);同时支持用户进行提问,通过 NLP 识别用户意图,然后找到答案并回答用户。本次仅记录在进行部署主动服务通信...

    背景

    最近,公司在开发一款主动服务机器人,将产生的消息数据通过服务端推送到客户端(H5、iOS、Android);同时支持用户进行提问,通过 NLP 识别用户意图,然后找到答案并回答用户。本次仅记录在进行部署主动服务通信服务时遇到的问题。

    服务器向 Web 页面推送消息的方式

    • 非阻塞轮询(短轮询):客户端以固定的频率(比如10秒钟一次)向服务端发送请求,如果服务端没有数据响应,就直接响应一个空,如果有数据响应,就将响应数据作为结果返回给客户端。特点是每次请求后,都会立即给响应。

    • 阻塞长轮询(长轮询):客户端像传统轮询一样从服务器请求数据。如果服务器没有可以立即返回给客户端的数据,则不会立刻返回一个空结果,而是保持这个请求等待数据到来(请求阻塞或者超时),等有响应数据之后将数据作为结果返回给客户端。特点是一次请求后直到有响应数据时才会给返回,否则阻塞等待。

    轮询并不是最好的解决方案

    短轮询

    优点是实现逻辑简单,但是当间隔太短时,会有大量的请求发送到服务器,会对服务器负载造成影响;而间隔太长,业务数据的实时性得不到保证无效请求的数量多。在用户量较大的情况下,服务器负载较高。

    长轮询

    优点是消息实时性高,无消息的情况下不会进行频繁的请求;缺点是服务端维持和客户端的连接会消耗掉一部分资源。

    WebSocket ,一种高效节能的双向通信机制来保证数据的实时传输

    • WebSocket 是 HTML5 一种新的协议(Web TCP)。它建立在 TCP 之上,实现了客户端和服务端全双工异步通信.

    • 它和 HTTP 最大不同是:

      WebSocket 是一种双向通信协议,WebSocket 服务器和 Browser/Client Agent 都能主动的向对方发送或接收数据;

      WebSocket 需要类似 TCP 的客户端和服务器端通过握手连接,连接成功后才能相互通信。

    服务端与客户端通信架构

    b0361ee1a611786e879e7f2e961ca7f7.png

    技术选型

    • socketio

    • 前端 socket.io.js

    • 服务端 Netty-SocketIO

    • 基础框架 SpringBoot

    客户端自动断开连接,怎么办?

    在自己电脑上把服务端启动后,然后客户端之间进行交流发送消息没有任何问题,但是通过 Nginx 代理后,发现客户端自动断开连接。

    确认HTTP 1.1 版本

    通过查看 Nginx 的日志,发现 HTTP 协议为 1.0 版本,因为在HTTP1.0 中,客户端发送请求,服务器接收请求,双方建立连接,服务器响应资源,请求结束;而在HTTP 1.1中,客户端发出请求,服务端接收请求,双方建立连接,在服务端没有返回之前保持连接,当客户端再发送请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。参考〈完整的配置 #1〉

    增加 WebSocket 的配置

    Nginx 通过在客户端和后端服务器之间建立起一条隧道来支持WebSocket。为了使 Nginx 可以将来自客户端的 Upgrade 请求发送给后端服务器,Upgrade 和 Connection 的头信息必须被显式的设置。参考〈完整的配置 #2〉

    完整的配置

    location / {

    proxy_pass http://chat-server:31001/;

    proxy_redirect off;

    #1

    proxy_http_version 1.1;

    #2

    proxy_set_header Upgrade $http_upgrade; #WebSocket配置

    proxy_set_header Connection "upgrade"; #WebSocket配置

    proxy_read_timeout 90;

    }

    问题总结

    H5、iOS、Android 支持

    • iOS,Android 端的 WebView 绝大部分支持。

      不支持的有:

    1. iOS7 之前的手机(可以不用考虑),iOS7 20139月发布的。

    2. Android5.0之前的手机,20153月发布的系统。

    PC端浏览器

    一些版本的浏览器不支持,大部分的发布时间在2012年之前的,其余主流浏览器都支持

    支持度可以参考这个:https://www.caniuse.com/#search=websocket

    展开全文
  • WebSocket.jpegWebsocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。这里我们用TP5.1框架结合Workerman来做演示首先用Composer下载TP5.1框架...
  • pom.xml配置: &lt;dependency&gt; &lt;groupId&...org.springframework.boot&...spring-boot-starter-websocket&lt;/artifactId&gt; &lt;/dependency&gt; 服务器端java packa...
  • WebSocket.jpegWebsocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。这里我们用TP5.1框架结合Workerman来做演示首先用Composer下载TP5.1框架...
  • 这个跨域跨源非常简单,直接贴(你以为我会告诉你屎因为我对websocket知之甚少才这样的吗) /** * WebSocket的配置文件 */ @Configuration @EnableWebSocket//启用websocket public class WebSocketConfig ...
  • 主要给大家介绍了关于Laravel使用swoole实现websocket主动消息推送的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Laravel具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • Swoole实现Websocket每秒钟主动推送

    千次阅读 2019-03-06 21:45:44
    Swoole实现Websocket主动推送 需求:需要每秒钟向前台推送一次行情数据。向某个用户推送消息及时响应前端发出的请求握手时效验令牌每个ip 不超过十个连接因为网上没有很具体的相关文档,只能摸着石头过河,现功能...
  • 基于java的WebSocket主动推送

    千次阅读 2017-11-21 14:43:30
    WebSocket主动推送 关于消息推送,现在的解决方案如轮询、长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据。 其实推送推送主要讲的是一个推的概念,WebSocket是一种主动推送...
  • WebSocket主动推送关于消息推送,现在的解决方案如轮询、长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据。其实推送推送主要讲的是一个推的概念,WebSocket是一种主动推送消息的...
  • 近来有个需求:想实现一个可以主动触发消息推送的功能...主动消息推送实现平常我们采用 swoole 来写 WebSocket 服务可能最多的用到的是open,message,close这三个监听状态,但是万万没有看下下面的onRequest回调的使...
  • 近来有个需求:想实现一个可以主动触发消息推送的功能,这个可以实现向模板消息那个,给予所有成员发送自定义消息,而不需要通过客户端发送消息,服务端上message中监听传送的消息进行做相对于的业务逻辑。...
  • springboot websocket后台主动推送消息

    千次阅读 2018-06-11 17:17:57
    springboot,websocket,后台主动推送消息1.2.pom&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="...
  • packagecom.jeecg.webSocket;importnet.sf.json.JSONObject;import javax.websocket.*;importjavax.websocket.server.PathParam;importjavax.websocket.server.ServerEndpoint;importjava.io.IOException;importjava...
  • WebSocket消息推送和聊天功能实现

    千次阅读 2019-07-13 23:46:37
    WebSocket消息推送SpringBoot集成WebSocket实现消息推送和聊天Demogradle引入依赖测试用的Controller两个测试页面...WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据...
  • WebSocket 实时推送消息

    2021-01-15 13:42:06
    2.前端自动关闭或者主动关闭都不影响下次正常上线推送 在线客户端:http://www.websocket-test.com/ 中间需要推送的数据存储到redis中了,因项目的不同可以做相对于的调整。 3.定时异步操作 后台通信处理,...
  • 近来有个需求:想实现一个可以主动触发消息推送的功能,这个...主动消息推送实现平常我们采用 swoole 来写 WebSocket 服务可能最多的用到的是open,message,close这三个监听状态,但是万万没有看下下面的onRequest回...
  • 需求需要实现一个可以主动触发消息...主动消息推送实现平常我们采用 swoole 来写 WebSocket 服务可能最多的用到的是open,message,close这三个监听状态,但是万万没有看下下面的onRequest回调的使用,没错,解决这次...
  • WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通讯...WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,798
精华内容 719
关键字:

websocket主动推送