摘要: 目标:设计一个短时缓存,被缓存的对象在缓存里待的时间超过了指定的时间要被清除。 好处:缓存不会越来越大。 用途:用在某种临时性频繁存取的场合。 设计: 需要有一个缓存对象。缓存对象里包裹着真正的被缓存的对象和被缓存的时刻。 需要有一个Map,用来存放“缓存对象” 需要有一个定时器,周期性的检查Map 阅读全文
posted @ 2020-12-27 00:38 福尔 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 可以的。你只需要将下面这张图的Bob换成你的Sip Server就可以了。 你还需要在WebSocket服务器 (http://proxy.example.com) 端写一些代码,目的是将客户端过来的sip invite转发到你自己的sip server. 阅读全文
posted @ 2020-12-24 14:22 福尔 阅读(308) 评论(0) 推荐(0) 编辑
摘要: WebSocket连接的建立只有两步: Client发送一个 ‘upgrade' request,这是一个http请求,使用的是http协议。 Server返回一个http 101,代表请求成功。 接下来双方就开始使用WebSocket 协议相互通讯了,不再使用http协议了。 下面这张图就是上面着 阅读全文
posted @ 2020-12-23 21:53 福尔 阅读(2462) 评论(0) 推荐(0) 编辑
摘要: peerA (RTCPeerConnection对象) 调用createOffer方法准备创建SDP 在createOffer的回调方法里,同时做了这两件事 调 用peerA的setLocalDescription(description)方法,这个方法会触发peerA的icecandidate 监 阅读全文
posted @ 2020-12-19 16:49 福尔 阅读(1938) 评论(0) 推荐(0) 编辑
摘要: 如何让网页自动适应PC端和移动端 只需增加这么一行:<meta name="viewport" content="width=device-width, initial-scale=1.0"> viewport是view portion的意思,用汉语说,就是“可见区域“。所以这个标签是在定义可见区域 阅读全文
posted @ 2020-12-14 13:38 福尔 阅读(910) 评论(0) 推荐(0) 编辑
摘要: https://www.daimajiaoliu.com/daima/4ed34f008100404 很多年前自己写的,本地早已遗失,没想到网上还有。转发一下,留个纪念。 阅读全文
posted @ 2020-12-13 22:52 福尔 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 在网上看到一篇文章:https://developer.aliyun.com/article/4387 看着眼熟,原来是我写的,很多年前写的,我自己都没有保存好,都不知道哪里去了,没想到互联网上竟然有人转载,用这种方式保存下来了。 很好。 的确,互联网是有记忆的! 阅读全文
posted @ 2020-12-13 22:20 福尔 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 浏览器如何获取音视频流 答:用webrtc的navigator.getUserMedia方法,方法体里主要是写下面两句话: video.src = window.URL.createObjectURL(stream); video.srcObject = stream; 这两句的作用都是获取用户音视 阅读全文
posted @ 2020-12-11 23:42 福尔 阅读(1485) 评论(0) 推荐(0) 编辑
摘要: 符号#常常表示number, 比如#1 表示 number 1. 所以,在linux shell中,用$#表示传递进来的参数个数。 * 常用来表示“所有”,所以$*表示传递进来的所有参数合在一起. ​​​​ 阅读全文
posted @ 2020-09-08 23:47 福尔 阅读(751) 评论(0) 推荐(0) 编辑
摘要: “为什么vim的复制按键在y上?”“理由很简单,因为它距离食指比较近”。"j更近,为什么不用它“?”因为j已经被更常用的向下移动命令占用了“。VI编辑器的按键用途设计者在使用频率和更省力之间找到了完美的平衡。还能将这些按键的位置安排的更好一点吗?很难。所以使用者一旦习惯,就离不开它。因为真的很省力。 阅读全文
posted @ 2020-08-08 10:48 福尔 阅读(99) 评论(0) 推荐(0) 编辑