在浏览某些网页的时候,例如 WebQQ、京东在线客服服务、CSDN私信消息等类似的情况下,我们可以在网页上进行在线聊天,或者即时消息的收取与回复,可见,这种功能的需求由来已久,并且应用广泛。

网上关于这方面的文章也能搜到一大堆,不过基本上都是理论,真正能够运行的代码很少,原理性的东西我就不当搬运工了,本文主要是贴示例代码,最多在代码中穿插一点便于理解,本文主要的示例代码基于 javascript,服务端基于 nodejs 的 koa(1/2)框架实现。


模拟推送

Web端 常见的消息推送实际上大多数都是模拟推送,之所以是模拟推送,是因为这种实现并不是服务器主动推送,本质依旧是客户端发起请求,服务端返回数据,起主动作用的是客户端。


短轮询

实现上最简单的一种模拟推送方法,原理就是客户端不断地向服务端发请求,如果服务端数据有更新,服务端就把数据发送回来,客户端就能接收到新数据了。

一种实现的示例如下:

const loadXMLDoc = (url, callback) => {let xmlhttpif(window.XMLHttpRequest) {//  IE7+ Firefox Chrome Safari 等现代浏览器执行的代码xmlhttp = new XMLHttpRequest()} else {// IE5 IE6浏览器等老旧浏览器执行的代码xmlhttp = new ActiveXObject('Microsoft.XMLHTTP')}xmlhttp.onreadystatechange = () => {if(xmlhttp.readyState === 4 && xmlhttp.status === 200) {document.getElementById('box1').innerHTML = xmlhttp.responseTextcallback && callback()}}// 打开链接发送请求xmlhttp.open('GET', 'http://127.0.0.1:3000/' + url, true)xmlhttp.send()
}// 轮询
setInterval(function() {loadXMLDoc('fetchMsg')
}, 2000)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

上述代码,设置定时任务,每隔 2s使用 ajax发起一次请求,客户端根据服务端返回的数据来进行决定执行对应的操作,除了发送 ajax,你还可以使用 fetch

fetch('localhost:3000/fetchMsg', {headers: {'Accept': 'application/json, text/plain, */*'}
}
  • 1
  • 2
  • 3
  • 4
  • 5

引申:fetch目前的浏览器支持度还很低,所以在实际生产环境中使用的时候,最好添加一些 polyfill,一种垫片使用顺序示例如下: 
es5 的 polyfill — es5-shim 
Promise 的 polyfill — es6-promise - IE8+ 
fetch 的 polyfill — fetch - IE10+

如果你在使用某种框架,例如 vue 或者 angular,那么你同样可以使用这些框架自带的请求方法,总之基于页面的友好访问性,在发送请求的同时不要刷新页面就行了。

这里写图片描述

优点:

前后端程序都很容易编写,没什么技术难度

缺点:

这种方法因为需要对服务器进行持续不断的请求,就算你设置的请求间隔时间很长,但在用户访问量比较大的情况下,也很容易给服务器带来很大的压力,而且绝大部分情况下都是无效请求,浪费带宽和服务器资源,一般不会用于实际生产环境的,自己知道一下就行了。


长轮询

相比于上一种实现,长轮询同样是客户端发起请求,服务端返回数据,只不过不同的是,在长轮询的情况下,服务器端在接到客户端请求之后,如果发现数据库中的数据并没有更新或者不符合要求,那么就不会立即响应客户端,而是 hold住这次请求,直到符合要求的数据到达或者因为超时等原因才会关闭连接,客户端在接收到新数据或者连接被关闭后,再次发起新的请求。

为了节约资源,一次长轮询的周期时间最好在 10s ~ 25s左右,长连接也是实际生产环境中,被广泛运用于实时通信的技术。

客户端代码如下:

function getData() {loadXMLDoc('holdFetchMsg', ()=>{getData()})
}
getData()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

想要在连接断开或发生错误的时候,再次发起请求连接,实现也很简单,以下问使用 fetch 实现示例:

function getData() {let result = fetch('http://127.0.0.1:3000/holdFetchMsg', {headers: {'Accept': 'application/json, text/plain, */*'}})result.then(res => {return res.text()}).then(data => {document.getElementById('box1').innerHTML = data}).catch(e => {console.log('Catch Error:', e)}).then(() => {getData()})
}
getData()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

一种较为直观的服务器 hold住连接的实现如下:

router.get('/holdFetchMsg', (ctx, next)=> {let i = 0while(true) {// 这里的条件在实际环境中可以换成是到数据库查询数据的操作// 如果查询到了符合要求的数据,再 break// 不过这种可能会导致服务器进行例如疯狂查询数据库的操作,非常不友好if(++i > 2222222222) {ctx.body = '做我的狗吧'break}}
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

还有一种方法,不过这种纯粹是为了 hold住而 hold住,可以作为上一种方法的辅助,解决诸如服务端进行疯狂查询数据库的操作,类似于 Java中的 Thread.sleep()操作

let delay = 2000, i = 0while(true) {let startTime = new Date().getTime()// 这里的条件在实际环境中可以换成是到数据库查询数据的操作if(++i > 3) {ctx.body = '做我的狗吧'break} else {// 休息会,别那么频繁地进行诸如查询数据库的操作// delay 为每次查询后 sleep的时间while(new Date().getTime() < startTime + delay);}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

如果你现在的 Nodejs版本支持 ES6中的 Generator的话,那么还可以这样(koa1环境, Generator写法):

app.use(function* (next){let i = 0const sleep = ms => {return new Promise(function timer(resolve){setTimeout(()=>{if(++i > 3) {resolve()} else {timer(resolve)}}, ms)})}yield sleep(2000)this.body = '做我的狗吧'
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

如果你现在的 Nodejs版本支持 ES7中的 async/await的话,,那么还有一种 hold住连接的方法可供选择(koa2环境):

router.get('/holdFestchMsg', async(ctx, next) => {let i = 0const sleep = ms => {return new Promise(function timer(resolve) {setTimeout(async()=>{// 这里的条件在实际环境中可以换成是到数据库查询数据的操作if(++i > 3) {resolve()} else {timer(resolve)}}, ms)})}await sleep(2000)ctx.body = '做我的狗吧'
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

这里写图片描述

优点:

尽管长轮询不可能做到每一次的响应都是有用的数据,因为服务器超时或者客户端网络环境的变化,以及服务端为了更好的分配资源而自动在一个心跳周期的末尾断掉连接等原因,而导致长轮询不可能一直存在,必须要不断地进行断开和连接操作,但无论如何,相比于短轮询来说,长轮询耗费资源明显小了很多

缺点:

服务器 hold连接依旧会消耗不少的资源,特别是当连接数很大的时候,返回数据顺序无保证,难于管理维护。


长连接

这种是基于 iframe 或者 script实现的,主要原理大概就是在主页面中插入一个隐藏的 iframe(script),然后这个 iframe(script)的 src属性指向服务端获取数据的接口,因为是iframe(script)是隐藏的,而且 iframe(script)的 刷新也不会导致 主页面刷新,所以可以为这个 iframe(script)设置一个定时器,让其每隔一段时间就朝服务器发送一次请求,这样就能获得服务端的最新数据了。

先说一下 利用 script的长连接:

前端实现:

<script>function callback(msg) {// 得到后端返回的数据console.log(msg);}function createScript() {let script = document.createElement('script')script.src = 'http://127.0.0.1:3000/fetchMsg'document.body.appendChild(script)document.body.removeChild(script)}
</script>
<script>window.onload = function() {setInterval(()=>{createScript()}, 3000)}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

后端实现:

router.get('/fetchMsg', (ctx, next)=> {ctx.body = 'callback("做我的狗吧")'
})
  • 1
  • 2
  • 3

主要是在前端,一共两条 script脚本,大致左右就是在一定的时间间隔内(示例为 3s)就动态地在页面中增删一个链接为用于请求后端数据的 script脚本。

后端则返回一段字符串,这段字符串在返回前端时,有一个 callback字段调用前端的代码,类似于 jsonp的请求。

注意:修改一个已经执行过的 script脚本的 src属性是没什么卵用的,修改之后,最多在页面的 DOM上发生一些变化,而浏览器既不会发请求,也不会执行脚本,所以这里采用动态增删整个 script标签的做法。

可以看到,这种方法其实与短轮询没什么区别,唯一的区别在于短轮询保证每次请求都能收到响应,但上述示例的长连接不一定每次都能得到响应,如果下一次长连接开始请求,上一次连接还没得到响应,则上一次连接将被终止。

当然,如果你想长连接每次也都能保证得到响应也是可以的,大致做法就是在页面中插入不止一条 script标签,每条标签对应一个请求,等到当前请求到达再决定是否移除当前 script标签。

如果想要得到有序的数据响应,则还可以将 setInterval换成递归调用,例如:

function createScript() {let script = document.createElement('script')script.src = 'http://127.0.0.1:3000/fetchMsg'document.body.appendChild(script)script.onload = ()=> {document.body.removeChild(script)// 约束轮询的频率setTimeout(()=>{createScript()}, 2000)}
}window.onload = function() {createScript()
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

使用 iframe的方式与此类似,就不赘述了,不过需要注意的是, iframe可能存在跨域的情况,可能会比 script方式麻烦一些。


WebSocket

WebSoket是 HTML5新增的 API,具体介绍如下(来源w3c菜鸟教程)

WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。

上面所提到的短轮询、长轮询、长连接,本质都是单向通信,客户端主动发起请求,服务端被动响应请求,但 WebSocket则已经是全双工通讯了,也就是说无论是客户端还是服务端都能主动向对方发起响应,服务器具备了真正的 推送能力。

一段简单的 客户端 WebSocket代码示例如下:

function myWebSocket() {let ws = new WebSocket('ws://localhost:3000')ws.onopen = ()=> {console.log('send data')ws.send('client send data')}ws.onmessage = (e)=> {let receiveMsg = e.dataconsole.log('client get data')}ws.onerror = (e)=>{console.log('Catch Error:', e)}ws.onclose = ()=> {console.log('ws close')}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

想要让客户端的 WebSocket能够连接上服务器,服务端必须要具备能够响应 WebSocket类型的请求才行,一般的服务器是没有自带这种能力的,所以必须要对服务器端程序代码做出些改变。

自己封装服务器端响应 WebSocket的代码可能会涉及到很底层的东西,所以一般都是使用第三方封装好的库,基于nodejs的 WebSocket库有很多,ws 功能简单, API形式更贴近于原生,大名鼎鼎的 socket.io 是与 Nodejs联手开发,功能齐全,被广泛运用于游戏、实时通讯等应用。

以下给出一种基于 socket.io 实现 简单客户端和服务端通信的示例:

客户端:

// HTML
<body><ul id="messages"></ul><form action="" id="msgForm"><input id="m" autocomplete="off" /><input type="submit" class="submit" value="submit"></form>
</body>// 引入 socket.io
<script src='/socket.io/socket.io.js'></script>
<script>function appendEle(parent, childValue, position = 'appendChild') {let child = document.createElement('li')child.innerHTML = childValueparent[position](child)}function socketIO(msgForm, msgBox, msgList) {const socket = io()msgForm.addEventListener('submit', (e)=>{e.preventDefault()socket.emit('chat message', msgBox.value)appendEle(msgList, '<b>Client: </b>' + msgBox.value)msgBox.value = ''})socket.on('chat message', (msg)=>{appendEle(msgList, msg)})}window.onload = ()=>{let msgForm = document.querySelector('#msgForm')let msgBox = document.querySelector('#m')let msgList = document.querySelector('#messages')socketIO(msgForm, msgBox, msgList)}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

服务端实现:

const app = require('express')()
const http = require('http').Server(app)
const io = require('socket.io')(http)app.get('/', (req, res)=> {res.sendFile(__dirname + '/index.html')
})io.on('connection', socket=>{console.log('a user connected')socket.on('disconnect', ()=>{console.log('user disconnect')})socket.on('chat message', (msg)=>{console.log('clien get message: ', msg)setTimeout(()=>{io.emit('chat message', '<b>Server:</b>' + ' Are you Sure? -- Come from your father')}, 1500)})
})http.listen(3000, ()=> {console.log('Server running at 3000.')
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

效果如下:

这里写图片描述

注、websocket是javaweb实现即时消息推送最佳方案,但是需要服务器jdk在版本7以上支持,低版本浏览器还不支持,所以要支持低版本即时消息推送还需要选择另外一种方法。

使用反向ajax框架DWR

DWR(Direct Web RemoTIng)是一个Web远程调用AJAX扩展框架,通过DWR客户端的JavaScript可以直接调用Web服务器上的JavaBean类的方法,解决了原有AJAX应用必需请求HTTP控制组件(如Servlet,Struts的AcTIon等)才能调用服务器端业务类的方法,从而简化了AJAX应用的开发。使用DWR可以不需要编写复杂的控制层组件。

  1.2 DWR反向AJAX技术

  正常情况下,DWR调用服务器端的JavaBean对象方法使用正向请求/响应模式,也称为拉模式(Pull Model),由客户端JavaScript调用JavaBean方法,返回结果通过回调方法更新页面上的HTML元素,实现监控数据的显示。这种正向模式符合一般的管理系统应用,但对监控系统实时性要求较高的应用却力不从心。而反向模式即推模式(Push Model),是适应监控系统的最佳方式,由服务器组件将取得的监控数据推送到Web客户端,不需要客户端主动请求,而是被动接收。因而无需进行Web层进行页面刷新,即可实现数据更新显示。

  最新版本的DWR 2.X增加了反向(Reverse AJAX)功能,通过反向AJAX功能,服务器端的JavaBean对象可以将取得的数据直接推送到指定的客户端页面,写到指定的HTML元素内,这个过程不需要客户端进行任何的请求操作。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. vue+Element后台管理系统框架搭建(一)

    vueElement后台管理系统框架搭建vue框架搭建及开发规范1.1环境配置1.2项目创建1.开始搭建项目vueProject2.打开我们的项目&#xff0c;可以看到如下的目录结构&#xff1a;1.3开发规范1.vueProject的目录结构&#xff1a;2.项目创建及命名规范2.vue2.0概念和语法2.1 Vue.js的目…...

    2024/4/20 20:07:04
  2. 利用createobjectUrl图片预览以及上传

    步骤1&#xff1a;创建一个表单 <form class"form-horizontal" id"uploadForm" enctype"multipart/form-data"> <div class"form-group"><label for"Email" class"col-sm-2 control-label">Ema…...

    2024/4/20 20:07:02
  3. 浏览器上传文件到PHP的几种方法

    使用H5的方法来上传文件 优点是&#xff1a;上传过程很方便&#xff0c;简单 缺点&#xff1a;并不是所有的浏览器都支持&#xff0c;兼容性比较差&#xff0c;现阶段不推荐使用 <div class"fr"> <!--上传文件方法一&#xff1a;--> <form name&quo…...

    2024/4/20 20:07:01
  4. Kernighan 评论 Pascal 语言的不足及一读者的不同意见

    Why Pascal is Not My Favorite Programming Language 为什么Pascal不是我最喜欢的程序设计语言 。 &#xff08;后有一反面意见及本文原文&#xff09; Brian W. Kernighan, April 2, 1981AT&T Bell Laboratories, Murray Hill, New Jersey 07974翻译&#xff1a;ljhhh0…...

    2024/4/21 3:26:32
  5. PRO/E配置文件选项

    关于配置文件选项为配置文件输入所需的设置&#xff0c;可以预设环境选项和其它全局设置。要设置配置文件选项&#xff0c;使用“选项”对话框&#xff08;“实用工具”>“选项”&#xff09;。本帮助模块含有一个按字母顺序显示每一选项或相关选项组的配置选项列表&#xf…...

    2024/4/21 3:26:32
  6. Python总复习-下

    目录 人工智能总目录网页链接 文章目录目录9、Python-web前端Day01-HTML-页面1. Web1. 什么是WEB2. 组成3. Web 服务器4. 浏览器2. HTML 概述1.HyperText Markup Language2. 标记3. 网页3. HTML基础语法1. 标签/标记2. HTML标签介绍3. 完整的网页结构4. 网页头部设置5. 网页主…...

    2024/4/23 3:29:10
  7. 关于一个递归逻辑的代码优化建议

    1.需求说明 刚接手一个项目&#xff0c;有个文件上传分类功能&#xff0c;但每次只能操作一个文件&#xff0c;测试需要几十个上百个文件&#xff0c;效率实在太低了。 于是让公司小弟改为可以支持批量上传&#xff0c;小弟在写的时候&#xff0c;发现后端只能一个文件处理结…...

    2024/4/21 3:26:29
  8. JS中使用FormData上传文件、图片的方法

    参考博客&#xff1a;http://www.cnblogs.com/xiaohuochai/p/6543019.htmlhttp://www.cnblogs.com/qcloud1001/p/6839541.html 使用CORS 实现Ajax的另类跨域:关于浏览器端&#xff0c;以jQuery为例&#xff0c;我们需要在ajax请求中加一个参数xhrFields&#xff0c;并设置为wit…...

    2024/4/21 3:26:28
  9. 手把手教你如何利用阿里云上传文件

    最近由于公司业务需要&#xff0c;我需要使用阿里云来保存视频文件。然后访问的话需要一个临时的url可供使用&#xff0c;这样不用担心长时间暴露签名信息和地址。但是完全没做过这个东西&#xff0c;心里是慌得一笔。手动滑稽~~~。但是也是没办法&#xff0c;硬着头皮冲啦~ 不…...

    2024/4/21 3:26:28
  10. 常见面试题总结

    参考&#xff1a; https://www.nowcoder.com/ta/front-end-interview?query&asctrue&order&tagQuery&page1 http://bigerfe.com/ https://blog.csdn.net/keyandi/article/details/89227175 https://blog.csdn.net/MingL520/article/details/88549999 https:/…...

    2024/4/21 3:26:26
  11. Elastic Search + Logstash + Kibana 初学者日志

    ELK下载https://www.elastic.co/downloads因为我用的是windows操作系统&#xff0c;所以下面的介绍都基于windows环境。功能方面应该和Linux是一样的。Getting Started with ELK for Apache Logs (这个例子展示了怎样用logstash把log发送到Elastic Search, 然后用Kibana做图形化…...

    2024/4/22 13:37:56
  12. 从零开始配置 TypeScript 项目

    关于作者本文出自于掘金的子弈&#xff0c;原文链接 从零开始配置 TypeScript 项目。以下是他的一些不错的作品&#xff0c;感兴趣的可以阅读&#xff1a;面试分享&#xff1a;两年工作经验成功面试阿里P6总结在阿里我是如何当面试官的如果觉得不错希望能够在掘金关注、点赞哦&…...

    2024/4/21 3:26:24
  13. 从JavaScript到TypeScript,Pt。 IIB:使用类,接口和混合器进行设计

    Class-based design has become such an instinct that many developers cant imagine any alternative. 基于类的设计已经成为一种本能&#xff0c;许多开发人员无法想象任何替代方案。 Fortunately for that lot, ES6 adds a class keyword to simplify the syntactical cac…...

    2024/4/21 3:26:24
  14. ROS学习笔记(三)先锋机器人的使用 — 参考 ROS wiki 和 Mobile wiki

    –参考方案&#xff1a; 找到了关于p3-dx的一些关于ROS的资料 https://github.com/ManolisCh/pioneer_p3dx https://github.com/SeRViCE-Lab/p3-dx http://wiki.ros.org/demo_pioneer 先锋机器人ROS的教程&#xff1a; https://www.youtube.com/watch?v-9NHupBPC6Y 首先…...

    2024/4/21 3:26:22
  15. 第七次迭代开发总结(AngularJS下文件上传的实现)

    第七次迭代开发总结 突然之间冒出来一个第七次迭代总结看上去挺奇怪的&#xff0c;事实上因为学校项目的关系&#xff0c;我暑假留校继续开发。在迭代的前半周期&#xff0c;团队进行了一次技术迁移&#xff0c;舍弃LiveScript转向了ECMAScript 6。有空的话会写一些ECMAScript…...

    2024/4/21 3:26:21
  16. “JavaScript Promises和AngularJS $q Service”Part 2 (教程篇)

    欢迎大家到我的博客关注我学习Ionic 1和Ionic 2的历程&#xff0c;共同学习&#xff0c;共同进步。 注&#xff1a;本文是译文&#xff0c;难免有错误或理解不足之处&#xff0c;请大家多多指正&#xff0c;大家也可挪步原文。由于本文讲解十分精彩&#xff0c;非常推荐大家查看…...

    2024/4/21 3:26:20
  17. HEVC相关文档

    转载自 ye_f最终编辑 ye_f虽然也是做编码的&#xff0c;让自己懒得写啊&#xff0c;一下材料源自http://blog.csdn.net/yuanchao99/article/details/6803856&#xff0c;谢谢啊。 •ITU官网&#xff1a; –http://www.itu.int/itu-t/workprog/wp_item.aspx?isn7752•会议文档&…...

    2024/4/21 3:26:19
  18. angularJS关于依赖和模块与amd/cmd的区别,分享下结合使用示例

    angular框架的介绍大家可以参考下官网和中文社区。 下面链接是简介&#xff1a; http://www.angularjs.cn/docs/developer/328.html 简单总结下就是&#xff1a; 双向绑定&#xff0c;可测试性的代码结构&#xff0c;模型视图分离的一个前端MV*框架 其中angular也提供了模型的概…...

    2024/4/21 3:26:18
  19. angularjs完整demo例子

    AngularJS的主要特点是 mvc 数据双向绑定 分模块 依赖注入    mvc m: $Scope 变量 V:视图 c:controllerfunction(){} 控制器 方法    Angularjs的用法 1.在一个有起始标签的元素开始标签内使用 ng-app来指定angularjs的作用范围 2.angularJS的表达式是双大括号 {{}} 里…...

    2024/4/21 3:26:17
  20. x265-1.8版本-x265.h代码注释

    注&#xff1a;问号以及未注释部分 会在x265-1.9版本内更新 /****************************************************************************** Copyright (C) 2013 x265 project** Authors: Steve Borho <steveborho.org>** This program is free software; you can …...

    2024/4/19 22:05:24

最新文章

  1. python--使用pika库操作rabbitmq实现需求

    Author: wencoo Blog&#xff1a;https://wencoo.blog.csdn.net/ Date: 22/04/2024 Email: jianwen056aliyun.com Wechat&#xff1a;wencoo824 QQ&#xff1a;1419440391 Details:文章目录 目录正文 或 背景pika链接mqpika指定消费数量pika自动消费实现pika获取队列任务数量pi…...

    2024/4/26 19:06:47
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. UDP实现Mini版在线聊天室

    实现原理 只有当客户端先对服务器发送online消息的时候&#xff0c;服务器才会把客户端加入到在线列表。当在线列表的用户发消息的时候&#xff0c;服务器会把消息广播给在线列表中的所有用户。而当用户输入offline时&#xff0c;表明自己要下线了&#xff0c;此时服务器把该用…...

    2024/4/24 2:36:58
  4. MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用

    数据结构 我们知道MySQL的存储引擎Innodb默认底层是使用B树的变种来存储数据的 下面我们来复习一下B树存储 B树存储 哈希存储的区别 哈希存储,只能使用等值查询 B树与B树存储 我们知道B树实际上就是B树的变种 那么为啥使用B树而不是使用B树呢? 我们知道效率的高低主要取决于…...

    2024/4/23 6:22:51
  5. ROS2从入门到精通1-2:详解ROS2服务通信机制与自定义服务

    目录 0 专栏介绍1 服务通信模型2 服务模型实现(C)3 服务模型实现(Python)4 自定义服务5 话题、服务通信的异同 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。…...

    2024/4/25 22:20:52
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/25 18:39:24
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/25 18:38:39
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/25 18:39:23
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/25 18:39:20
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/25 4:19:21
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/25 18:39:12
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/25 13:19:01
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57