基于 WebRTC 实现一个文件传输工具(一)- WebRTC 详解
如题,最近在折腾一个文件传输工具,用于在多个不同设备间方便快速地传输文件。我的要求也很直接,这个文件传输工具,最好不需要繁琐的安装和配置过程,能够做到开箱即用,同时它还需要兼容我的 PC 设备和多个移动设备,经过一番调研之后,我决定把技术方案定为了 WebRTC。 本篇文章是此系列文章的第一篇,详细介绍 WebRTC 技术。 WebRTC 概述WebRTC(Web Real-Time Communication)是一个开源项目,旨在通过简单的应用程序接口(API)实现浏览器和移动应用之间的实时通信(RTC)。它允许网页浏览器进行语音通话、视频聊天和点对点文件分享,而无需用户安装特殊的插件或第三方软件。 简单来说,WebRTC 项目主要思想是定义 WebRTC API,该 API 允许浏览器安全地访问设备上的输入外设,如麦克风和网络摄像头,以点对点的方式与远程设备共享或交换媒体数据以及实时数据。借助 WebRTC,多个不同设备可以在一个平台上流畅地、安全地共享语音、视频和实时数据。 WebRTC 是 Google 在 2011 开源的项目,并将其纳入 Chrome 浏览器的开发计划...
2023 年终总结
临近年末,最近陆陆续续看到不少人公开了自己的年终总结,我也跟个风,总结一下即将过去的我的 2023 年。 一开始我在总结过去的一年的时候,发现并没有太多值得总结的事情,出于博客网站的需要,我决定还是开个好头,写下了这篇文章。需要特别说明的是,这是一篇流水账式的文章,并没有特别的干货,写的真的很烂。 既然说到这里,先来说一下我的个人网站,2023 年是我正式开始写博客的第一年,正如我在这篇文章中所说,以前我总是记录的很杂、很随意,我希望通过写博客的方式让自己养成记录的好习惯,并且借此得以规范我的记录,希望这是一个好的开始。截止到现在,整个 2023 年我一共正式写了 12 篇文章,算很少的了,其中有不少时间还花在个人网站的建设上,一开始我使用的是 hugo 来构建我的网站,苦于我使用的主题文档缺少,加上 hugo 可自定义性不高,在 12 月份的时候我把个人网站改为了 hexo 构建,并且使用了全新的主题,这套主题文档很详细,可配置性很高,比较适合作为我构建个人网站的选择,最后也就是你现在看到的这个样子。 去年 12 月,我跟妹子摇中了一个不错的盘,也算正式上车,成为房奴大队的一员...
GitHub 数据库升级过程
最近 GitHub 官方博客更新了一篇文章,讲述了将 GitHub 网站依赖的 1200+ 台 MySQL 主机升级到 8.0 版本的过程。 先前,Oracle 官方宣布,在 2023 年 10 月 21 日之后,MySQL 5.7 将达到其生命周期的终点,这意味着 Oracle 将不再为 MySQL 5.7 提供官方更新、错误修复或安全补丁,正是在这一背景下,才有了 GitHub 此次的升级。 根据 GitHub 官方介绍,GitHub 使用 MySQL 来存储大量关系数据,因此对于数据库这种底层的基础设施的升级绝非易事,为了升级到 MySQL 8.0,他们规划、测试和升级本身总共花费了一年多的时间,并且需要 GitHub 内部多个团队的协作。因此对于 GitHub 此次这种大规模的底层数据库的升级,我本身是抱有极大的兴趣,也想了解一下如此大规模的 MySQL 的集群采用了什么样的升级方案,所以我去阅读了 GitHub 官方博客,并且将原文翻译如下,以下是原文翻译全部内容。 15 年前,GitHub 开始于一个使用 Ruby on Rails(cczywyc 注:一个基于 R...
交换机和网络虚拟化
最近在公司负责几个二层网络、三层网络相关的项目,项目推进的过程中也掌握了一些交换机和网络虚拟化相关的知识。在之前我接触到的可能更多是三层、四层网络相关的知识,刚好借着这次项目经验总结梳理一下二层网络设备和云计算中网络虚拟化相关的知识。 交换机概述什么是交换机交换机是一种网络硬件设备,用于连接多台设备(如计算机、服务器、打印机等),使它们能够在一个局域网(LAN)内通过数据包进行通信,现如今,交换机是包括互联网在内的现代 IT 网络的基本组成部分之一,它解决了设备间通信的问题。 交换机接受一个设备的数据包,并且将数据包发送到指定的设备上去,从而实现设备间高效通信。交换机是如何知道它收到的数据包应该发往哪个设备呢?其实是通过 MAC 地址来实现的,交换机收到的网络报文头里包含了源 MAC 地址和目的 MAC 地址,然后交换机在它的地址表中找到对应的网络设备,从而将数据包发往指定的设备。关于交换机具体的工作原理,将在下面具体介绍。 交换机类型从网络模型上来看,我们说的交换机一般都是指的工作在二层网络模型上面的交换机,我们称为二层交换机,它通过检查数据帧的目标 MAC 地址,将数据帧发送...
go feed 介绍
上篇文章记录了我在服务器上搭建了自己的 RSS 服务,经过一段时间的体验使用,我发现 RSS 这种信息获取的方式的确很适合我。在深入使用的过程中,也逐渐总结了一些 tt-rss 的优缺点,先说我认为好的方面: 丰富的主题 完善的插件系统 支持独立部署 功能齐全 同时我也认为它有不好的地方(个人主观观点): PHP 驱动实现,稍有笨重,不够”现代化“ 虽然有较为丰富的主题,但整体 UI 风格不是特别喜欢 用户系统不够完善,可玩性不高 不支持除 RSS 订阅以外的形态,例如:网页、文章阅读清单功能 基于上述,我决定自己开始探索这种类 RSS 阅读器的产品形态,自己做一个类 RSS 阅读器。 目前,大部分的博客网站都是支持 RSS 的,不支持 RSS 的网站,也有 RSS Hub 这样的产品帮助我们解决问题。RSS 文件订阅类型一般有 rss、atom、json类型,文件格式为 XML 和 JSON。网站将网站的内容信息整合到一个 RSS 文件中,这个文件我们一般称为 feed,也叫信源。在 RSS 文件里面具体包含了网站的标题、描述、作者信息、文章列表等信息,并且随着网站内容...
搭建了自己的 RSS 服务
先来简单说一下什么是 RSS 吧,RSS 全称叫做 Really Simple Syndication,中文叫做简易信息聚合,也叫聚合内容,它是一种消息来源格式规范,用以聚合多个网站更新的内容并自动通知网站订阅者。使用 RSS 后,网站订阅者便无需手动查看网站是否有新的内容,同时 RSS 可将多个网站更新的内容进行整合,以摘要的形式呈现,有助于订阅者快速获取重要信息,并选择性地点阅查看。说的简单点就是它可以把各种信息源整合起来,我只需要在一个 RSS 服务里面就可以获取到来自各种不同渠道的订阅更新,现在我们看到个很多技术博客和网站都提供了 RSS 订阅链接,细心的话你应该在很多地方就见过这个东西。 说来奇怪,RSS 本应是上个时代的产物,近些年缺被越来越多的人追捧,在目前这个信息爆炸的时代,各种信息流充满着我们的屏幕,不同的信息平台也有着不同的推送方式,导致信息获取破碎,无法筛选自己真正感兴趣的信息。如果你跟我有差不多同样的想法,那么,搭建一个自己的 RSS 服务就显的很有必要了。 我的信息获取来源,一方面是一些微信公众号,还有一些技术博客和刊栏,导致我的信息获取非常的分散不集中...
聊聊 Java21 新特性
背景2023 年 09 年 20 日,Java21 正式发布,这是最新的 LTS 版本,官方预计会对此版本提供至少 8 年的维护。这一次 JDK 的升级是否会引起 Java8 项目升级暂不清楚,但是此版本带来了诸如虚拟线程等重量级功能更新,可能会导致 Java21 版本将会成为未来几年最经典的 JDK 版本,就像曾经的 Java8 一样。 新功能介绍此次 Java21 版本一共带来了 15 个新功能更新,具体可以见官方的发布页面,一眼望去,其中最重磅的更新摸过于 JEP444,也就是我们所说的虚拟线程,一般我们在其他语言(比如 golang)里面叫做协程。除此之外,还有诸如分代 ZGC、Switch 模式匹配等实用功能的更新,以下是 Java21 版本所有的新功能: 提案 标题 说明 JEP430 String Templates (Preview) 字符串模版。Java 语言现有字符串文本和文本块增加功能,其他常用语言均已提供相应的功能用法 JEP431 Sequenced Collections 序列集合。该 JEP 提议引入”一个新的接口族,用于表示集合的概...
换工作了
经过两个多月断断续续的面试,工作终于是在 6 月份敲定了,不管结果如何,好在终于做出了选择,综合考虑,选择了一家了还算不错的公司,正式开启了职业生涯的第二阶段。其实这篇文章 6 月份就应该写的,之所以拖到现在一方面是刚去新环境需要一个时间过渡,另外一方面则是一直没制定好下一个阶段的计划。 按照习惯,先总结一下过去两个多月吧,找工作是一个及其痛苦的过程,两个多月的时间里,我要随时保持面试状态,学习也是以八股和面试为主,面试本身也极大的消耗了我的精力。我清楚的记得,过去两个月经常失眠,夜晚思绪乱飞,常常因为理想和现实差距过大而焦虑,要达到理想中的目标还需要付出太多。上周有天晚上跟妹子聊到这个问题,她跟我说到每个有成就的人可能都会经历从基础的物质享受到实现自身价值的阶段,这其中伴随着理想的实现,对普通人来说,美好的事物往往都是从煎熬中获得的。老实说,在现在这样的环境下我不一定完全认同这些观点,但是我觉得为什么不再坚持一下呢?就是这样伴随着焦虑和自我怀疑结束了毕业以来的第一次社招,我成功换了一家公司工作。可能对其他人来说,这不是一个多么好的 offer,但是这是我现阶段最好的选择,我很感...
详解 SSH
概述SSH 全称 The Secure Shell protocol,它是应用层上的一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境,它是通过在网络中创建安全隧道来实现 SSH 客户端与服务器端之间的连接。SSH 协议最常见的用途是远程登录系统,人们通常使用 SSH 来传输命令行界面和远程执行命令,因此可以说它是我们使用最频繁的网络协议之一。 在设计上,SSH 是 telnet 和非安全 shell 的替代品,Telnet 和 Berkeley rlogin、rsh、rexec 等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击。SSH 旨在保证非安全网络环境(例如互联网)中信息加密完整可靠。 定义SSH 协议先后定义在多个RFC文档中,以下列出了 SSH 协议相关的一些重要的 RFC。 RFC 介绍 时间 RFC 4250 协议号码 2006 年 01 月 RFC 4251 协议架构 2006 年 01 月 RFC 4252 身份验证 2006 年 01 月 RFC 4253 SSH 传输层协议 2006 年 01...
流量控制(一):从限流算法说起
前言关于这篇文章起因,最近计划看一下《Effective Java》,然后我了解到此书的作者同样也是 Google Guava 库的作者,作为一个练习2年的 Java 的程序员,还没有研究过 Guava,属实有点说不过去,借此机会研究了一下 Google Guava。 先简单说一下 Google Guava 库,它不仅仅是 JDK 的升级库,诸如包含集合(collections)、缓存(caching)、并发库(concurrency libraries)、原生类型支持(primitives support)、字符串处理(string processing)、I/O 库等,还是《Effective Java》这本书中那些优秀经验的实践代表,两者应该结合起来阅读学习。在 Guava 中有两个实现我很感兴趣,一个是它实现的 Bloom Filter(布隆过滤器),另外一个就是本篇文章即将介绍的 RateLimiter(限流器)。 我们平时在开发高并发的分布式系统时,会借助许多手段来满足系统的并发要求,我总结下来大致分为下面几个方面: 缓存:通过缓存系统可以减少对底层数据存...














