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 ...
随机推荐
- 2017-9-14 NOIP模拟赛
送分题 (songfen)e Time Limit: 10 00ms y Memory Limit:128MB题目描述LYK 喜欢干一些有挑战的事, 比如说求区间最大子段和. 它知道这个题目有 O(n ...
- 洛谷P3959 宝藏(状压dp)
传送门 为什么感觉状压dp都好玄学……FlashHu大佬太强啦…… 设$f_{i,j}$表示当前选的点集为$i$,下一次要加入的点集为$j$时,新加入的点和原有的点之间的最小边权.具体的转移可以枚举$ ...
- 12.创建高级联结---SQL
一.使用表别名 SQL除了可以对列名和计算字段使用别名,还允许给表名起别名.这样做有两个主要理由: 缩短SQL语句: 允许在一条SELECT语句中多次使用相同的表. SELECT cust_name, ...
- Net Core WebApi几种版本控制对比
Net Core WebApi几种版本控制对比 一.版本控制的好处: (1)有助于及时推出功能, 而不会破坏现有系统. (2)它还可以帮助为选定的客户提供额外的功能. API 版本控制可以采用不同的方 ...
- (转)Module ngx_http_fastcgi_module
Example ConfigurationDirectives fastcgi_bind fastcgi_buffer_size fastcgi_buffering f ...
- document.getElementById(...) is null
<html> <head> <script type="text/javascript"> document.getElementById('b ...
- LCD1602显示中文汉字
小子在西藏 2011-11-25编写 特别说明笔者是上面的作者,感谢那些原意分享知识的人.时隔5年我又看到了笔者当年写的东西,我想这期间还有许许多多的人 今天写在博客上,愿更多后来者可以学习. LCD ...
- JS中比较的数值如何比较大小
<script type="text/javascript"> function check_num(){ var num=document.getElementByI ...
- Java中的日志框架
日志框架的介绍和使用 常见的日志框架:JUL(Java.util.logging),JCL(jakarta commons logging),SLF4J,jboss-logging,Log4j,Log ...
- springboot+shiro+cas实现单点登录之shiro端搭建
github:https://github.com/peterowang/shiro-cas 本文如有配置问题,请查看之前的springboot集成shiro的文章 1.配置ehcache缓存,在re ...