nodejs——js 实现webSocket 兼容移动端
nodejs——js 实现webSocket 兼容移动端
//服务器端
//npm install --save ws
const express = require('express');
const http = require('http');
const url = require('url');
const WebSocket = require('ws'); const app = express(); app.use(function (req, res) {
res.send({ msg: "hello" });
}); const server = http.createServer(app);
const wss = new WebSocket.Server({ server }); var stocks = {
"con1": 95.0,
"con2": 50.0,
"con3": 300.0,
"con4": 550.0,
"con5": 35.0
}
function randomInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
var stockUpdater;
var randomStockUpdater = function() {
for (var symbol in stocks) {
if(stocks.hasOwnProperty(symbol)) {
var randomizedChange = randomInterval(-150, 150);
var floatChange = randomizedChange / 100;
stocks[symbol] += floatChange;
}
}
var randomMSTime = randomInterval(500, 2500);
stockUpdater = setTimeout(function() {
randomStockUpdater();
}, randomMSTime);
}
randomStockUpdater(); wss.on('connection', function (ws) {
var sendStockUpdates = function (ws) {
if (ws.readyState == 1) {
var stocksObj = {};
for (var symbol in clientStocks) {
stocksObj[symbol] = stocks[symbol];
}
if (stocksObj.length !== 0) {
ws.send(JSON.stringify(stocksObj));//需要将对象转成字符串。WebSocket只支持文本和二进制数据
console.log("更新", JSON.stringify(stocksObj));
}
}
}
var clientStockUpdater = setInterval(function () {
sendStockUpdates(ws);
}, 5000);
ws.on('message', function (message) {
var stockRequest = JSON.parse(message);//根据请求过来的数据来更新。
console.log("收到消息", stockRequest);
clientStocks = stockRequest;
sendStockUpdates(ws);
});
}); server.listen(8080, function listening() {
console.log('Listening on %d', server.address().port);
});
//客户端 vue,写成普通html 直接用浏览器访问也可以
<template>
<div>
<button @click="check"> 启动 </button>
<div id="con1"></div>
<div id="con2"></div>
<div id="con3"></div>
<div id="con4"></div>
<div id="con5"></div>
</div> </template>
<script> export default {
data () {
return { }
},
methods:{
check(){ var isClose = false;
var stocks = {
"con1": 0, "con2": 0, "con3": 0, "con4": 0, "con5": 0
};
var WebSocketsExist = true;
try {
var ws = new WebSocket("ws://10.20.11.180:8080");
} catch (ex) {
try
{
ws = new MozWebSocket("ws://10.20.11.180:8080");
}
catch(ex)
{
WebSocketsExist = false;
}
} if (WebSocketsExist) {
alert("您的浏览器支持WebSocket. 您可以尝试连接到聊天服务器!");
} else {
alert("您的浏览器不支持WebSocket。请选择其他的浏览器再尝试连接服务器。");
} function updataUI() {
ws.onopen = function (e) {
console.log('Connection to server opened');
isClose = false;
ws.send(JSON.stringify(stocks));
console.log("sened a mesg");
}
//更新UI
var changeStockEntry = function (symbol, originalValue, newValue) {
document.getElementById(symbol).innerHTML = symbol+' : '+newValue.toFixed(2);
}
// 处理受到的消息
ws.onmessage = function (e) {
var stocksData = JSON.parse(e.data);
console.log(stocksData)
console.log('-----------------------------------------');
for (var symbol in stocksData) {
if (stocksData.hasOwnProperty(symbol)) {
changeStockEntry(symbol, stocks[symbol], stocksData[symbol]);
stocks[symbol] = stocksData[symbol];
}
}
};
}
updataUI();
}
}, } </script>
https://www.cnblogs.com/stoneniqiu/p/5402311.html
nodejs——js 实现webSocket 兼容移动端的更多相关文章
- 基于node.js 的 websocket的移动端H5直播开发
这一篇介绍一下基于node.js 的 websocket的移动端H5直播开发, 下载文章底部的源码,我是用vscode打开, 首先在第一个终端运行 npm run http-server 这个指令是运 ...
- 使用原生 JS 复制文本兼容移动端 iOS & android
注意事项 使用 JS 实现复制功能并不是很难,但是有几个需要注意的地方. 首先文本只有选中才可以复制,所以简单的做法就是创建一个隐藏的 input,然后绑定需要复制的文本. 另外如果将 input 设 ...
- JS 复制文本兼容移动端 iOS & android
有几个需要注意的地方. 首先文本只有选中才可以复制,所以简单的做法就是创建一个隐藏的 input,然后绑定需要复制的文本. 另外如果将 input 设置为 `type="hidden&quo ...
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- WebSocket兼容到低版本浏览器
就目前而言,WebSocket是最好的Web通信解决方案了.但是IE从10才开始兼容它,对于目前大量IE8存在的市场,原生的WebSocket显然不太实用,我们需要低版本兼容的解决方案.于是我模拟We ...
- Go, JS和Websocket
JS中建立Websocket连接 var ws = new WebSocket("ws://hostname/path", ["protocol1", &quo ...
- 上传图片转为base64格式预览并压缩图片(不兼容IE9以下浏览器,兼容移动端ios,android)
前些天公司要求在微信移动端做上传图片并预览的功能,要求能够调用摄像头拍照并立即预览. 在网上搜了一些方法,开始自己写了个简单的功能实现代码.结果发现移动端拍照出来的图片动不动就2M+,又因为要批量上传 ...
- MarkdownPad2代码高亮插件兼容移动端样式
如果不知道MarkdownPad2使用代码高亮插件可以查看前一篇文章<MarkdownPad2使用代码高亮插件> 先看移动端效果图: 移动端点击查看效果 或者手机扫如下二维码: 我们经常阅 ...
- JS判断PC还是移动端打开网页
最近在做移动端网站,也需兼容PC端.还没找到更好的方法,只能用javascr判断用户是在PC端打开还是移动端打开. JS判断 var isPC = function (){ var userAg ...
随机推荐
- 《Java程序设计》第一次实验实验报告
北京电子科技学院(besti)实验报告 课程:java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:java开发环境的熟悉(linux + eclipse) 程 ...
- Linux内存管理的基本框架⭐⭐
Linux内核的映射机制设计成三层,在页面目录和页面表中间增设了一层“中间目录”.在代码中,页面目录称为PGD,中间目录称为PMD,而页面表称为PT.PT中的表项称为PTE,PTE是“Page Tab ...
- Hive的Explain命令
Hive的Explain命令,用于显示SQL查询的执行计划. Hive查询被转化成序列阶段(这是一个有向无环图).这些阶段可能是mapper/reducer阶段,或者是Metastore或文件系统的操 ...
- mybatis的一级缓存和二级缓存(1)
1.mybatis一级缓存,sqlSesion级别的缓存,一级缓存默认一直开启的,sqlSession级别的一个Map,把查询的数据放到一个Map中,以后需要相同的数据,直接从Map中去取 与数据库一 ...
- 商品详情页,banner滚动点击加载效果,js,jquary
<script language="javascript"> $(document).ready(function () { //purchase ...
- Python学习札记(十九) 高级特性5 迭代器
参考:迭代器 Note 1.可用于for循环的对象有两类:(1)集合数据类型:list tuple dict str set (2)Generator:生成器和含yield语句的函数.这些可以直接作用 ...
- docker shipyard 问题
安装 docker shipyard curl -s https://shipyard-project.com/deploy | bash -s docker machine 创建的虚拟机无法直接运 ...
- python find命令、startwith命令
python的字符串有很多好用的操作,比如find,startswith命令. 这几个命令在处理配置文件的时候很有用,比如用startswith判断是否是注释行. 注意:几个函数的返回值是不同滴. 函 ...
- vue-cli background iamge
vue-cli 可以将图片直接放在项目生成的 static 文件夹里,然后在components里面直接采用绝对路径去取就可以了. 在根目录里面都会有一个static目录,这个是用来存放静态文件的,把 ...
- python+opencv+pyqt5控制摄像头在Qlabel上显示
import cv2 import numpy as numpy from PIL import * import sys from PyQt5.QtWidgets import * from PyQ ...