关于websocket和ajax无刷新
HTTP无状态:
Ajax只能实现用户和服务器单方面响应(单工机制).
如果设置为长轮询(ajax设置多少秒进行一次请求,时间间隙可能会有延迟,且浪费资源)
如果设置为长连接(客户端请求一次,服务器保持持续链接,一旦有了新数据,就全部发送客户端)
webScoket:
webSocket是响应客户端和服务器端双响应(全双工机制).
支持的浏览器有:Chrome4+、Firefox4+、IE10+(“+”包含本身)
支持的服务器有:Node0、Apache7.0.2、Nginx1.3
1. 采用webscoket - 节省资源
var websocket = null;
//判断当前浏览器是否支持WebSocket
if ('WebSocket' in window || window in WebSocket) {
//建立连接,这里的/websocket ,是ManagerServlet中开头注解中的那个值
websocket = new WebSocket("ws://localhost:8080");
}
else {
alert('当前浏览器 Not support websocket')
}
//连接发生错误的回调方法
websocket.onerror = function () {
setMessageInnerHTML("WebSocket连接发生错误");
};
//连接成功建立的回调方法
websocket.onopen = function () {
setMessageInnerHTML("WebSocket连接成功");
}
//接收到消息的回调方法
websocket.onmessage = function (event) {
setMessageInnerHTML(event.data);
if (event.data == "") {
location.reload();
}
}
//连接关闭的回调方法
websocket.onclose = function () {
setMessageInnerHTML("WebSocket连接关闭");
}
//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
window.onbeforeunload = function () {
closeWebSocket();
}
//将消息显示在网页上
function setMessageInnerHTML(innerHTML) {
document.getElementById('message').innerHTML += innerHTML + '<br/>';
}
//关闭WebSocket连接
function closeWebSocket() {
websocket.close();
}
2.ajax(长轮询) - 浪费服务器和客户端资源
<script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
<script>
//每500ms使用ajax取一次数据
setTimeout(function () {
var fun = arguments.callee;
// 重复调用 - 500ms.
setTimeout(fun, 500); // 这里写ajax代码.
console.log(fun, 'ajax执行了!'); }, 500);
</script>
3.服务器长连接(具体由后台操作服务器执行.)
采用nodejs做的一个示例:
怎么使用(同一项目文件目录下):
npm i socket.io
index.html
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head> <body>
<input type="text" id="text" width="500">
<input type="button" value="发送消息" id="btn"> <script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io();
document.getElementById('btn').onclick = function () {
socket.emit('program', document.getElementById('text').value);
}
socket.on('reply', function (msg) {
console.log(msg);
});
</script>
</body> </html>
node-server.js
const http = require('http');
const fs = require('fs'); const server = http.createServer(function (req, res) {
if (req.url == '/') {
fs.readFile('./index.html', function (err, data) {
res.end(data);
});
}
}); const io = require('socket.io')(server);
let number = 1;
io.on('connection', function (socket) {
console.log(number++ + '个客户已连接...');
socket.on('program', function (msg) {
console.log('接收的信息:' + msg);
socket.emit('reply', msg);
})
}) server.listen(8080, '127.0.0.1');
关于websocket和ajax无刷新的更多相关文章
- Ajax.BeginForm()实现ajax无刷新提交
1. 同时安装 Microsoft jQuery Unobtrusive ajax 和 jQuery Unobtrusive Ajax,如下图 安装完成之后多了如下的js库 2. 引用该js库 lay ...
- 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传
现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...
- Ajax无刷新提交
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ajax 无刷新分页
//ajax 无刷新分页1.前台要做的 滑动时 当前page+1,通过page ajax请求后台接口获取数据将数据进行拼装;2.后台要做的 做分页接口返回json数据前台判断触发请求条件: var p ...
- thinkphp ajax 无刷新分页效果的实现
思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...
- DWZ框架Ajax无刷新表单提交处理流程
DWZ框架Ajax无刷新表单提交处理流程是: 1. ajax表单提交给服务器 2. 服务器返回一个固定格式json结构 3. js会调函数根据这个json数据做相应 ...
- Thinkphp框架 -- ajax无刷新上传图片
用Thinkphp框架做无刷新上传图片 视图层 View <!doctype html> <html lang="en"> <head> < ...
- Ajax无刷新提交表单和显示
ajax无刷新表单提交: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- ajax无刷新方式收集表单并提交表单
ajax无刷新方式收集表单有两种方式, 一个是使用html5的FormData.一个是传统的方式. 一,FormData,在主流的浏览器中可以用,IE不好用啊. 另外,FormData使用有两个条件, ...
随机推荐
- 汕头市队赛 SRM 09 C 撕书
C 撕书III-3 SRM 09 背景&&描述 琉璃双在撕书. 书总共有n页,每页都可以看作是一个数字. 琉璃读书喜欢来回地读.但他也因此发现了作者的灌水行为:有些连续 ...
- python module :shelve
shelve 是一个 key-value 的数据库. 操作方法和字典几乎一致. shelve 模块功能:以 key - value 的方式存储数据. 写数据 >>> import s ...
- post传参部分数据丢失
tomcat获取post传的参数,只接收到前半部分参数,后半部分参数没有接收到 可能的原因是: tomcat中maxParameterCount是用来限制请求中的最大参数量,默认是10000,如果超过 ...
- 理想中的SQL语句条件拼接方式 (二)
问题以及想要的效果,不重复叙述,如果需要的请先看 理想中的SQL语句条件拼接方式 . 效果 现在有2个类映射数据库的2张表,结构如下: public class User { public int U ...
- 【IDEA】IDEA断点调试与清除断点
有时候我们必须启动debug模式来进行调试,在IDEA中断点调试与Eclipse大致相同: 1.以debug模式启动服务器: 2.在需要打断点的那一行前面点击一下标记上红点则是有断点,再次点击可以清除 ...
- 开车旅行(NOIP2012)
原题传送门 这道坑爹题调了我2小时233~ 首先这道题可以用set,平衡树,双向链表等一堆非(sang)常(xin)简(bing)单(kuang)的算法搞出对于任何一个高度h[i]的前2名和后2名 然 ...
- 【leetcode】500. Keyboard Row
问题描述: Given a List of words, return the words that can be typed using letters of alphabet on only on ...
- windows 添加自助白名单
由于公司分部用的是动态IP,又需要用到总部的OA系统,OA完全开放对外不安全,所以写了这个工具 项目地址 https://github.com/cainiaoit/Windows-firewall-s ...
- 9.OpenStack安装web界面
安装仪表板 安装仪表板组件 yum install -y openstack-dashboard httpd mod_wsgi memcached python-memcached 编辑/etc/op ...
- 5.OpenStack添加镜像服务
添加镜像服务 这里是安装在控制器上 创建数据库 mysql -uroot -ptoyo123 CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glanc ...