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+订阅发布者模式模拟实现股票价格实时刷新的更多相关文章

  1. Android 订阅-发布者模式-详解

    1.概念简述 Android 简称观察者模式, GoF说道:Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”. 有 ...

  2. websocket实现数据库更新时前端页面实时刷新

    websocket实现数据库更新时前端页面实时刷新 javaweb 目录(?)[+] userjsp ManagerServletjava 如题,实现以上功能,我知道主要有两大种思路: 轮询:轮询的原 ...

  3. C#事件支持发布者/订阅者模式(观察者模式)

    C#事件支持发布者/订阅者模式,发布者将事件通知给订阅者,而订阅者在事件发生时调用已经注册好的事件处理函数.        public delegate void delUpdate();  //委 ...

  4. vue双向绑定(数据劫持+发布者-订阅者模式)

    参考文献:https://www.cnblogs.com/libin-1/p/6893712.html 实现mvvm主要包含两个方面,数据变化更新视图,视图变化更新数据. 关键点在于data如何更新v ...

  5. EventBus事件总线框架(发布者/订阅者模式,观察者模式)

    一. android应用内消息传递的方式: 1. handler方式-----------------不同线程间传递消息. 2. Interface接口回调方式-------任意两个对象. 3. In ...

  6. JavaScript 设计模式: 发布者-订阅者模式

    JavaScript 设计模式: 发布者-订阅者模式 发布者-订阅者模式 https://github.com/Kelichao/javascript.basics/issues/22 https:/ ...

  7. 设计模式---订阅发布模式(Subscribe/Publish)

    设计模式---订阅发布模式(Subscribe/Publish) 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象.这个主题对象在自身状态变化时,会通知所有订阅者对象,使 ...

  8. Kafka下的生产消费者模式与订阅发布模式

    原文:https://blog.csdn.net/zwgdft/article/details/54633105   在RabbitMQ下的生产消费者模式与订阅发布模式一文中,笔者以“数据接入”和“事 ...

  9. Publisher/Subscriber 订阅-发布模式

    Publisher/Subscriber 订阅-发布模式 本博后续将陆续整理这些年做的一些预研demo,及一些前沿技术的研究,与大家共研技术,共同进步. 关于发布订阅有很多种实现方式,下面主要介绍WC ...

随机推荐

  1. sqlserver2012——INTERSECT交查询

    1. select a.成绩编号,a.分数,b.姓名 From 成绩信息 a,学生信息 b ' 一般的查询 a.成绩编号,a.分数,b.姓名 From 成绩信息 a,学生信息 b ' order a. ...

  2. codeforces358D Dima and Hares【dp】

    从本质入手,这个东西影响取值的就是相邻两个哪个先取 设f[i][0/1]为前i个(i-1,i)中先取i/i-1的值(这里不算上i的贡献 转移就显然了,注意要先复制-inf #include<io ...

  3. 有线电视网(树形dp)

    有线电视网 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点.从转播站到转播站以及从 ...

  4. 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 一 . 数据结构基础概念普及(线性表). 线性表可分为顺序表与链表,它们是堆栈.队列.树.图等数据结构的实现基础. 顺序表,线性表的顺序存储结构是 ...

  5. Spring征服数据库

    一.spring的数据访问哲学 1. Srping的目标之一就是允许我们在开发应用程序的时候,能够遵循面向对象(Object Oriented,OO)原则中的"针对接口式编程"; ...

  6. Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题

    Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题 问题描述: 我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa05 ...

  7. Python文件内容修改

    ''' 吃的文件内容: 过油肉菜 尖椒菜 娃娃菜 ''' import os with open("吃的", mode="r", encoding=" ...

  8. GPU程序缓存(GPU Program Caching)

    GPU程序缓存 翻译文章: GPU Program Caching 总览 / 为什么 因为有一个沙盒, 每一次加载页面, 我们都会转化, 编译和链接它的GPU着色器. 当然不是每一个页面都需要着色器, ...

  9. NET Core断点续传

    .NET Core断点续传   ASP.NET Core断点续传 在ASP.NET WebAPi写过完整的断点续传文章,目前我对ASP.NET Core仅止于整体上会用,对于原理还未去深入学习,由于有 ...

  10. 《深入理解java虚拟机》笔记(4)对象已死吗

    一.垃圾回收器回收的对象 虚拟机内存区域中程序计数器.虚拟机栈.本地方法栈随线程而生,随线程而灭.这3个区域内存分配和回收都具备确定性.因此不需要过多考虑回收问题. 而Java堆和方法区不一样,这部分 ...