websocket+订阅发布者模式模拟实现股票价格实时刷新
1、新建文件夹
2、文件夹中新建index.html 和 index.js
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="contain">
<div class="item">
<h5>A1</h5>
<span>100</span>元
</div>
<div class="item">
<h5>B2</h5>
<span>100</span>元
</div>
<div class="item">
<h5>C3</h5>
<span>100</span>元
</div>
<div class="item">
<h5>D4</h5>
<span>100</span>元
</div>
<div class="item">
<h5>E5</h5>
<span>100</span>元
</div>
<button>close</button>
</div>
<script>
var mess = document.querySelector('.contain');
if(window.WebSocket){
var ws = new WebSocket("ws://localhost:8006")
document.querySelector('button').onclick = function(){
ws.close();
}
ws.onopen = function () {
ws.send('getPrice');
}
ws.onclose = function () {
ws.close();
}
ws.onerror = function () {
ws.close();
}
ws.onmessage = function (e) {
var data = JSON.parse(e.data);
var arr = [];
data.current.forEach((value)=>{
arr.push(`<div class="item"><h5>${value.id}</h5><span>${value.price}</span>元</div>`)
})
mess.innerHTML = arr.join('');
}
}
</script>
</body>
</html>
index.js
var ws = require('nodejs-websocket');
var pubSub = {
subscribe:[],
addPub(coon){
this.subscribe.push(coon)
},
pubInfo(data){
this.subscribe.forEach((value)=>{
console.log(value)
value.sendText(data);
})
}
}
var serve = ws.createServer(function (coon) {
coon.on('text',function (str) {
if(str == "getPrice"){
// console.log(coon);
pubSub.addPub(coon)
}
})
coon.on('close',function () {
console.log('close')
})
coon.on('error',function (code) {
console.log('error')
})
}).listen(8006)
function _RandNum() {
return Math.ceil(Math.random() * 100);
}
function getData() {
return JSON.stringify({"current":[
{
id:"A1",
price:_RandNum()
},
{
id:"B2",
price:_RandNum()
},
{
id:"C3",
price:_RandNum()
},
{
id:"D4",
price:_RandNum()
},
{
id:"E4",
price:_RandNum()
}
]})
}
setInterval(()=>{
pubSub.pubInfo(getData());
},2000)
3、文件夹下右键 open in Terminal ,安装 nodejs-websocket
npm install nodejs-websocket
目录下多了文件夹:node_modules
4、在Terminal运行 node index.js
打开页面即可实现页面实时刷新数据。
websocket+订阅发布者模式模拟实现股票价格实时刷新的更多相关文章
- Android 订阅-发布者模式-详解
1.概念简述 Android 简称观察者模式, GoF说道:Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”. 有 ...
- websocket实现数据库更新时前端页面实时刷新
websocket实现数据库更新时前端页面实时刷新 javaweb 目录(?)[+] userjsp ManagerServletjava 如题,实现以上功能,我知道主要有两大种思路: 轮询:轮询的原 ...
- C#事件支持发布者/订阅者模式(观察者模式)
C#事件支持发布者/订阅者模式,发布者将事件通知给订阅者,而订阅者在事件发生时调用已经注册好的事件处理函数. public delegate void delUpdate(); //委 ...
- vue双向绑定(数据劫持+发布者-订阅者模式)
参考文献:https://www.cnblogs.com/libin-1/p/6893712.html 实现mvvm主要包含两个方面,数据变化更新视图,视图变化更新数据. 关键点在于data如何更新v ...
- EventBus事件总线框架(发布者/订阅者模式,观察者模式)
一. android应用内消息传递的方式: 1. handler方式-----------------不同线程间传递消息. 2. Interface接口回调方式-------任意两个对象. 3. In ...
- JavaScript 设计模式: 发布者-订阅者模式
JavaScript 设计模式: 发布者-订阅者模式 发布者-订阅者模式 https://github.com/Kelichao/javascript.basics/issues/22 https:/ ...
- 设计模式---订阅发布模式(Subscribe/Publish)
设计模式---订阅发布模式(Subscribe/Publish) 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象.这个主题对象在自身状态变化时,会通知所有订阅者对象,使 ...
- Kafka下的生产消费者模式与订阅发布模式
原文:https://blog.csdn.net/zwgdft/article/details/54633105 在RabbitMQ下的生产消费者模式与订阅发布模式一文中,笔者以“数据接入”和“事 ...
- Publisher/Subscriber 订阅-发布模式
Publisher/Subscriber 订阅-发布模式 本博后续将陆续整理这些年做的一些预研demo,及一些前沿技术的研究,与大家共研技术,共同进步. 关于发布订阅有很多种实现方式,下面主要介绍WC ...
随机推荐
- javascript中的scroll事件
window.addEventListener('scroll',function(){ if(document.compatMode == "CSS1Compat") { ale ...
- 容易忘记的css属性和动画属性
动画属性 @keyframes 关键帧 --> animation 活泼 (配合使用) transform 变换 --> transition 过渡 (配合使用) 1.animation ...
- tp5 搜索之后保留分页
当接收到参数是执行搜索 public function index($name=null){ if (isset($_REQUEST['username'])) { $name = $_REQUEST ...
- gitlab之source tree使用方法
一.简介 1.source tree 是什么 可视化项目版本控制软件,使用git项目管理,支持windows/mac 客户端使用source tree开发源码,图形化提交到gitlab 二.使用sou ...
- C 语言实例 - 阶乘
C 语言实例 - 阶乘 一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1.自然数n的阶乘写作n!. n!=×××...×n.阶乘亦可以递归方式定义:!=, ...
- SQL SERVER CAST 和 CONVERT 函数
遇到CAST 函数转化数字不一致情况, select CAST('0000000011237590798' AS money) / 100 AS Amount--output : 112375907. ...
- NOI2015程序自动分析 并查集
有10^9个点,每次给出两个点的关系:权相等或不等,问最后能不能成立 感觉一开始在撕烤一个动态的问题,,,想写一个带权的并查集 结果发现静态询问,那就sb乱搞,懒得手写离散就直接map(卧槽好多细节忘 ...
- Uva1377
/* 在n个刻度和他们的差里挑不超过7个刻度,0是固定的,最大的刻度肯定是最大值,然后剩下的dfs挑. */ #include<bits/stdc++.h> #define inf 0x3 ...
- Table行合并操作
此方法不可取,但几天心血 保留,已有新想法,稍后会出一个完善的Table行列合并方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- (转)io优化
原文:http://blog.csdn.net/gzh0222/article/details/9227393 1.系统学习 IO性能对于一个系统的影响是至关重要的.一个系统经过多项优化以后,瓶颈往往 ...