序言

很早就想用起来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对象切换

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

websocket 项目应用的更多相关文章

  1. websocket项目电子签字使用场景

    场景描述:进入页面时,如果设置强制签字,发送签字webSocket连接,同时页面有个重新签字按钮,这个按钮会多次调用 第一步:先建立一个websocket的js文件,名叫signSocket.js内容 ...

  2. 我带着小程序和Springboot后端终于战胜了WebSocket!!!胜利( •̀ ω •́ )y

    WebSocket项目笔记 1. What is WebSocket? (以下内容来源于百度百科) WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器 ...

  3. php websocket

    php websocket项目开发,推荐使用:Workerman 本片内容使用Workerman实现了简单的及时聊天功能,具体代码如下: <?php // phpinfo(); header(' ...

  4. (转)WebSocket学习

    石墨文档:https://shimo.im/docs/3UkyOPJvmj4f9EAP/ (二期)17.即时通讯技术websocket [课程17]java We...实现.xmind0.1MB [课 ...

  5. 微信小程序之WebSocket

    本文版权归 OSChina jsongo0 所有,转载请标明出处,以示尊重! 原文:https://my.oschina.net/jsongo/blog/757871 为什么需要websocket?传 ...

  6. WebSocket使用中Stomp Client连接报ERROR CODE 200的解决办法

    [转] https://www.cnblogs.com/chrischeng/p/10237523.html 最近在做一个WebSocket项目,后台使用了Stomp协议的WebSocketConfi ...

  7. 快速上手微信小程序webSocket

    WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSocket API也被W3 ...

  8. 用 Go + WebSocket 快速实现一个 chat 服务

    前言 在 go-zero 开源之后,非常多的用户询问是否可以支持以及什么时候支持 websocket,终于在 v1.1.6 里面我们从框架层面让 websocket 的支持落地了,下面我们就以 cha ...

  9. 【Flask】 利用uWSGI和Nginx发布Flask应用

    因为Flask比较容易上手,之前也拿flask写过几个小项目,不过当时天真地以为只要在服务器上nohup跑一个python脚本就算是成功发布了这个flask项目.实际上这还面临很多问题,比如并发性不好 ...

随机推荐

  1. vs2010入门程序和出错问题解决方案

    本篇文章分两个部分: 第一,如何建立一个Helloword工程 1.打开Vs2010新建项目 2.选择Visual C++>>Win32>>Win32控制台应用程序,输入项目名 ...

  2. Unity与Android间的交互

    1.打开Android Studio,命名并自动生成包名 2.点击Next,设置最小支持的SDK 3.点击Next,选择Empty Activity 4.点击Next,默认就行不用管 5.Finish ...

  3. C#委托简介

    C#中委托是一种引用类型,该引用类型与其他引用类型不同,在委托对象的引用中存放的不是对数据的引用而是存放对方法的引用,即委托的内部包含一个指向某个方法的指针.通过使用委托把方法的引用封装在委托对象中, ...

  4. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  5. [MongoDB] - mongod.exe参数详解

    mongod.exe是启动mongodb的命令,我们可以通过mongod --help来查看帮助文档.下面是各个参数的对应中文解释.<基于Mongo3.0.5> 通用参数选项 -h/--h ...

  6. 为什么使用enable_shared_from_this——shared_ptr两类错误

    在使用C++实现弱回调时,订阅者应当维护一系列发布者的weak_ptr,而发布者注册回调时要传出this的shared_ptr指针,流行的实现方法是使用std::enable_shared_from_ ...

  7. 精通gulp常用插件

    本文主要展示的是gulp常用插件的使用方法和用途,通过对插件的熟练运用达到精通gulp.不定期更新.可以到github上面下载DEMO. github地址:lin-xin/gulp-plugins 匹 ...

  8. angular ui-router 正则

    {id:[0-9a-fA-F]{1,8}} 如果在找ui-router 时,会看到以上的正则 我解释一下 id是param,可以把必备的结果收起来 []里面的必配的正则,但只是给一个string {} ...

  9. 每天一个linux命令(49)--diff命令

    diff 命令是 Linux 上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff 在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件,diff ...

  10. Spring Data JPA: 实现自定义Repository

    一.前言 由于项目中的 实体(entity)默认都是继承一个父类(包含一些公共的属性,比如创建时间,修改时间,是否删除,主键id).为了实现逻辑删除,一般会自己实现RepositoryFactoryB ...