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. Linux 之问题集锦(一)

    1. 打开目录时,怎么只显示一个窗口 计算机 -- 编辑 -- 首选项 -- 行为 -- 总是总浏览器窗口中打开 2. linux中添加PATH时出现 Found a swap file by the ...

  2. js.alert(重写)

    function dialogFn(Msg, btnOkCallBack, btnCancelCallBack) { $("body").append('<div id=&q ...

  3. 【转】生产环境:Nginx高可用方案

    准备工作: 192.168.16.128 192.168.16.129 两条虚拟机.安装好 Nginx 安装Nginx 更新 yum 源文件: rpm -ivh http://nginx.org/pa ...

  4. 【转】mysql日期格式+日期增加天数

    WHERE DATE_FORMAT(字段,'%m/%d')=DATE_FORMAT(DATE_ADD(SYSDATE(),INTERVAL 7 DAY),'%m/%d') 条件 数据库字段时间=当前时 ...

  5. 人民网慕课联手FISCO BCOS开源社区上线“区块链学院”

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...

  6. Sublime Text 快捷键的使用

    Sublime Text 快捷键的使用 快捷键列表(Shortcuts Cheatsheet) 我把本文出现的Sublime Text按其类型整理在这里,以便查阅. 通用(General) ↑↓←→: ...

  7. 极客学院年VIP卡原价260的F码,200出售

    F码是中国最大的IT职业在线教育平台——极客学院推出的VIP时间兑换码,凭此可在极客学院官网兑换年VIP,畅享平台上所有IT技术课程. 购买请点击 http://www.bejson.com/othe ...

  8. CodeForces - 1005A-Tanya and Stairways(模拟)

    Little girl Tanya climbs the stairs inside a multi-storey building. Every time Tanya climbs a stairw ...

  9. python的入门1(补发)

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  10. 项目打包发布到tomcat中,中文出现乱码

    先吐槽一下,花了我3个小时,心累 本地运行正常,发布时maven插件里要加utf-8编码 https://blog.csdn.net/testcs_dn/article/details/4558379 ...