websocket 项目应用

序言

很早就想用起来websocket,可惜需要后台服务的支持,技术的翻新总会给我带来巨大的冲击,最近后端人员学习了websocket相关后台技术。于是我们开始动起来了。

学习

这位大兄弟的文章  http://www.cnblogs.com/smark/archive/2012/11/26/2789812.html

背景

因为需要做一个进度条功能,表格刷新基本angualr的双向绑定,说到底就是 $watchCollection,脏值检测来驱动渲染。所以之前加载方法就是定时改变数据源来实现。

结果表格性能比较差,尤其数据多的时候。长连接针对这种数据整盘推送的模式也很无力,于是websocket登场了。

项目实践

            if(("WebSocket" in window)){
                ws = new WebSocket(‘ws://‘+$location.host()+‘:‘+$location.port()+‘/websocket‘);
                ws.onopen = function(){
                    var param = {
                        "type":"app",
                        "namespace":params.namespace,
                        "name":params.name
                    };
                    ws.send(angular.toJson(param));
                };
                ws.onmessage = function(result){
                    var apps = angular.fromJson(result.data).apps;
                    if(!$scope.servicesTable.dataset||$scope.servicesTable.dataset.length != apps.length){
                        //更新整个表格数据
                        $scope.servicesTable.dataset = apps;
                        //重新绘制topo图
                        drawNodes(apps);
                    }
                    else{
                        for(var i=0;i<$scope.servicesTable.dataset.length;i++){
                            $scope.servicesTable.dataset[i].metadata.availablereplicas = apps[i].metadata.availablereplicas;
                            $scope.servicesTable.dataset[i].metadata.desiredreplicas = apps[i].metadata.desiredreplicas;
                        }
                    }
                    $scope.services=services;
                    console.log(services)
                    //脏值检测
                    $scope.$apply();
                };
                ws.onclose = function(evt){
                    $mdToast.show($mdToast.simple().textContent(‘webSocket已经被关闭 !‘).position(‘top right‘).theme(‘md-accent‘));
                };

            }
            else{
                $mdToast.show($mdToast.simple().textContent(‘当前浏览器不支持webSocket !‘).position(‘top right‘).theme(‘md-accent‘));
            }

效果

实现的效果自我感觉比较完美,实现了点对点监控,虽然数据还是全盘推送。但是只更新影响进度条的数据,没有出现整个表格刷新的局面,表格能够完成实时渲染。

注意点

①交互为字符串形式交互,需要javascript对象和json对象切换

②心跳未加,有需要再优化

时间: 2024-10-09 21:15:46

websocket 项目应用的相关文章

使用daphne部署django channles websocket 项目

前言:最近写了一个项目,有部分功能使用django channles websocket写的,使用的链接是wss:// 或者 ws:// ,到真实在uwsgi+nginx部署时,发现wss:// 或者 ws://不可用了,后来查了比较多时间,尝试过修改nginx配置文件,尝试过修改uwsgi配置文件,尝试过使用gunicorn部署,都没有解决此问题.最终发现需要多启用一个进程daphne,使用daphne启动django channles websocket对应功能进程,问题得到解决. 1.增加

websocket项目电子签字使用场景

场景描述:进入页面时,如果设置强制签字,发送签字webSocket连接,同时页面有个重新签字按钮,这个按钮会多次调用 第一步:先建立一个websocket的js文件,名叫signSocket.js内容如下: 1 /* websocket */ 2 var socket; 3 var connectStatus = false; 4 5 function Connect(){ 6 try{ 7 if(socket){ 8 socket.close(); 9 socket = null; 10 }

websocket实战(1) 入门

1.WebSocket介绍 1.1 概念 WebSocket是HTML5中一系列新的API,或者说新规范,新技术.支持页面上使用Web Socket协议与远程主机进行全双工的通信.它引入了WebSocket接口并且定义了一个全双工的通信通道,通过一个单一的套接字在Web上进行操作. 1.2 websocket vs HTTP 首先,web技术发展经历了以下阶段. 静态页面(html) 动态页面(cgi,j2ee,php...) Ajax技术 comet技术(轮询) 1.2.1 实现方案对比 举个

webSocket使用教程

webSocket使用教程 Gson简介 GSON是Google开发的Java API,用于转换Java对象和Json对象 gson和其他现有java json类库最大的不同时gson需要序列化的实体类不需要使用annotation来标识需要序列化的字段,同时gson又可以 通过使用annotation来灵活配置需要序列化的字段.在Java开发中,有时需要保存一个数据结构成字符串,可能你会考虑用Json,但是当 Json字符串转换成Java对象时,转换成的是JsonObject,并不是你想要的C

jmeter下的websocket自动化与压力测试

最近新接手了个websocket项目,消息模式有点类似聊天室的操作. 没有办法确定response的内容和时间.在网上搜了一圈,也没有找到类似的科普文章. 在这里写一篇文章记录一下问题和解决情况. 希望能抛砖引玉,把这个问题攻克下来. 首先,准备jmeter环境和websocket的支持库. 相关操作在简书<JMeter测试WebSocket的经验总结>一文中可以找到.原文地址: https://www.jianshu.com/p/bb8b3e928607 感谢 smooth00 大神的引用授

SSH 项目中 使用websocket 实现网页聊天功能

参考文章  :java使用websocket,并且获取HttpSession,源码分析    http://www.cnblogs.com/zhuxiaojie/p/6238826.html 1.在项目中引入依赖 websocket遵循了javaee规范,所以需要引入javaee的包 1 <dependency> 2 <groupId>javax.websocket</groupId> 3 <artifactId>javax.websocket-api<

SpringMVC+Mybatis框架整合源码 项目 下载 rest websocket html5

获取[下载地址]   QQ: 313596790   [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用

SpringMVC+Mybatis框架整合源码 项目 下载 rest websocket html5 自定义表单

获取[下载地址]   [免费支持更新]三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块B 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Dr

maven项目添加websocket

最近由于项目业务需求,需要用到websocket来实现即时信息的推送,学习了一下websocket,网上搜了一下学习教程,很多版本看的我云里雾里,最后选择用tomcat提供的最新版本(tomcat 启动可以查看demo) 好了,进入主题 1.新建maven项目 (websocketTest) 2.添加websocket依赖的jar包 <dependency> <groupId>javax.websocket</groupId> <artifactId>jav