分类目录: WEB网络

Linux TCP Backlog机制分析

前一阵子遇到一个奇怪的问题,分析了很久,最后查阅了一些资料,找到了问题的原因,是TCP的backlog机制的原因。首先描述一下重现问题的现象和过程: 构建一个TCP的服务端,监听端口4321,只监听请求,不accept,客户端不断发起连接,观察TCP连接建立的情况。服务端程序代码如下:

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 3票) Loading ... Loading ... | 同时归档在:IO编程, Linux内核, 算法数据结构 | 标签: , , |

家用NAS组网

不满足于之前的树莓派搭建的HOME NAS,又折腾了一套X86的低功耗版NAS服务器,将之前放在硬盘盒里面的硬盘都规整到了NAS服务器内。直接安装Windows Server 2012版本,配置简单。

不断增加网络设备,突然发现家里的网络越来越复杂,首先把家里的网络设备连接图整理出来记录一下。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 5票) Loading ... Loading ... | 同时归档在:数码硬件, 移动互联 | 标签: , , |

jAlbum 0.1.6版本截图

新增主要功能:修改页面适配手机屏幕。

Android 手机截图效果:

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 15票) Loading ... Loading ... | 同时归档在:Java, Jetty, 移动互联, 软件技术 | 标签: , |

开源照片整理系统jAlbum 0.1.3版本发布

第三个版本,jAlbum完整版差不多完工了:https://github.com/shentar/jAlbum/releases/tag/jAlbum_0.1.3

最后解决了文件系统监控的问题。利用Java1.7封装的文件系统的通知回调机制,实现对指定目录的递归监控,避免每次全盘扫描性能太低的问题。

注意对于linux系统对于单个用户能够监听的inotify对象个数做了限制,一般是限制为8192,因此需要修改系统内核的配置:在/etc/sysctl.conf文件中,新增一行:fs.inotify.max_user_watches=1000000,表明将该限制修改为100万个。下次重启后会生效,如果希望当前立即生效,则需要执行命令:sysctl –p 。

对于WatchService,只监控当前目录的变化,当前目录下新增文件或者文件夹时,当前文件夹会有修改事件或者创建事件,但是再下一层的文件夹或者文件发生变更时,并不会有任何事件,因此如果要监控指定的文件夹,需要递归监控到最后一层。没有验证文件系统的notify机制对进程性能和文件系统性能的影响,在树莓派上面简单验证了下,能够非常及时的发现新增文件,进程CPU和内存也没有明显的增加。终于解决了每次都有依赖全盘扫描一遍文件才能发现新增的文件的问题。

具体代码请参见源码中的DirWatchService类。

| 1 分2 分3 分4 分5 分 (5.00- 9票) Loading ... Loading ... | 同时归档在:Java, Jetty, 数据库, 软件技术 | 标签: , , |

基于Java WEB的本地照片管理系统jAlbum

最近搭建了基于树莓派3的家庭NAS系统,使用btsync工具将家里的各个终端:台式电脑、笔记本和家人的各个手机上面的图片等文件都集中备份到了NAS上面。发现各个设备上面的图片存放时并没有非常严谨的分类,并且有大量的重复照片,就想着做一个管理工具放在树莓派3上面,提供web访问接口,浏览器可以直接访问,生成一个简易相册,供各个终端查看和下载照片。 想到哪儿做到哪儿,并没有非常详尽的需求分析分析和软件设计。最终实现了如下功能:

  1. 实时监控和搜集指定目录的所有照片文件:jpg,png类型,所有视频文件:mp4。建立一张sqlite3数据表,存储所有照片的路径、时间、指纹和长宽比等信息。系统也支持运行在目前各个主流的操作系统:MS Windows、MAC OS和Linux上面,免安装部署。
  2. 对1步骤生成的照片库根据照片的指纹值进行剔重,生成一张新的表,确保内容相同的照片只存一条记录。并且所有记录按照媒体文件的拍摄时间顺序排列。
  3. 提供RESTful的接口供浏览器访问和获取相册。提供分年、月、日的视图。在前端呈现上面直接使用Java生成web页面,没有用一些高级的Marker组件。
  4. 监控文件系统中新建、修改和删除文件,并实时更新媒体库。
  5. 支持mp4视频文件的呈现。(需要在本机支持ffmpeg和ffprobe命令,下载ffmpeg工具:ffmpeg.org,如果是Windows系统,则需要把exe文件直接放入C:\Windows目录下;Linux系统可以直接使用发行版的软件仓库安装该软件。)
  6. 新增后台同步照片到Huawei Cloud OBS、Amazon S3对象存储上面,Huawei Cloud OBS支持直接上传冷对象,可以节省约3/4的开支,Amazon S3则需要配置后台任务定期转换对象到冷存储,也可以达到节省开支的效果。按照当前的费率,备份30GB的多媒体数据,每个月的开销大约在1¥多。
  7. 使用Face++服务实现人像识别,并按照人像对照片进行归集。开启该功能需要根据Face++的提示获取访问API的密钥对。

把项目代码开源出来,托管在此GIT服务上面:jAlbumhttp://git.codefine.site:3000/Shentar/jAlbum) 也可以从下面的链接下载编译好的各个版本的可执行文件包。 编译和配置方法参考源码主页。历史版本:

版本 发布时间 更新说明 下载链接
0.2.9 25 Nov 2017 1、支持备份数据到Huawei Cloud OBS对象存储。 下载
0.2.8 18 Nov 2017 1、支持HTTPS访问;
2、解决响应中重复HTTP头域Date和Expire问题;
3、解决鉴权Bug。
下载
0.2.7 19 Jul 2017 1、新增“风景”页;
2、使用Maven管理项目;
3、其他问题解决。
下载
0.2.6 19 May 2017 添加访问权限控制,相册放在外网访问时,发放token才能访问,避免照片被陌生人访问,如:搜索引擎抓取照片。 下载
0.2.5 7 May 2017 性能提升。 下载
0.2.4 3 Apr 2017 1、可靠性功能问题解决。
2、性能提升。
下载
0.2.3 17 Mar 2017 增加人像识别和按照任务归集照片功能。 下载
0.2.2 29 Jan 2017 1、增加后台同步照片到AmazonS3服务端实现。
2、修改若干重复文件检测bug。
下载
0.2.1 8 Jan 2017 解决问题:Chrome浏览器Ranges下载时第一个Range时不按照协议实现收取所有数据,最终在页面有多个Video时会导致浏览器挂死。单页面多个Video时,提取视频文件的缩略图呈现。 下载
0.2.0 6 Nov 2016 1、新增Video的支持,支持对MP4视频文件呈现;
2、修正稳定性和功能细节的bug。
 
0.1.9 14 Aug 2016 1、PC端浏览器,增加键盘翻页,左方向键翻上一页,右方向键翻下一页。 2、改进“照片发现”性能,最快在20秒内新增照片可以呈现到页面上。 3、其他bug解决。  
0.1.8 5 Aug 2016 1、优化照片隐藏逻辑,当隐藏的照片被移动或者删除后又添加时,也不会被显示出来。
2、适配移动终端浏览器,实现触控滑动照片翻页。
 
0.1.7 31 Jul 2016 自动识别图片的旋转角度,在前端呈现时自动适应浏览器并旋转到正确的方向。  
0.1.6 24 Jul 2016 修正若干bug。使用按钮代替超链接来导航相册。  
0.1.5 21 Jul 2016 1、增加前端照片旋转功能。
2、完善照片删除功能。
3、解决稳定性bug。
 
0.1.4 18 Jul 2016 新增删除照片功能。在单张照片显示的页面上面可以点击删除链接“删除”该照片,该照片之后不会再显示,当然照片还存在于磁盘中,只是不再显示。  
0.1.3 10 Jul 2016 1、增加文件系统监控,利用文件系统的notify机制及时处理新的文件变更;
2、不再定时全盘扫描,只在启动时进行全盘扫描;
3、定时根据base表的变更情况刷新辅助表及时呈现新增照片。
 
0.1.1 2 Jul 2016 1、支持缩略图;
2、优化编译脚本;
3、增加配置文件。
 
0.1.0 23 Jun 2016 first release.  

相册的效果图 0.2.4版本,根据人像识别结果进行照片归集页面截图: faces
0.2.0版本截图: 主页:
index
视频合集页面:
video
0.1.1版本截图:
snapshot

| 1 分2 分3 分4 分5 分 (5.00- 18票) Loading ... Loading ... | 同时归档在:Java, Jetty, 数据库, 软件技术 | 标签: , , , , , |

[转]TLS 握手优化详解

随着 HTTP/2 的逐渐普及,以及国内网络环境越来越糟糕(运营商劫持和篡改),HTTPS 已经开始成为主流。HTTPS 在 TCP 和 HTTP 之间增加了 TLS(Transport Layer Security,传输层安全),提供了内容加密、身份认证和数据完整性三大功能,同时也给 Web 性能优化带来新的挑战。上次写的「使用 BoringSSL 优化 HTTPS 加密算法选择」一文中,我介绍了如何针对不同平台启用最合适的传输加密算法。本篇文章我打算继续写 HTTPS 优化 —— TLS 握手优化。

TLS 的前身是 SSL(Secure Sockets Layer,安全套接字层),由网景公司开发,后来被 IETF 标准化并改名。通常没有特别说明时,SSL 和 TLS 指的是同一个协议,不做严格区分。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.50- 8票) Loading ... Loading ... | 同时归档在:软件技术 | 标签: , , , , |

SSL多域名绑定证书的解决方案

之前有几篇文章已经关注过加密解密证书和HTTTPS的一些基本原理。HTTPS、SSL与数字证书介绍公钥私钥加密解密数字证书数字签名详解。这里想探讨一下单一的web服务中多个域名共享一个证书或者使用多个证书进而使用多域名的HTTPS的问题。

在《HTTPS、SSL与数字证书介绍》这篇文章中介绍了,证书是在SSL握手阶段交换的,而域名是在HTTP请求的Header中传输到服务端的,HTTP协议在SSL之上,而两层协议之间是无法共享数据的。因此证书是在建立HTTP的Session之前就已经决定了。但是有越来越多的场景需要同一个Server监听多个域名,对外呈现多个入口。而我们知道,客户端会校验证书中的网址、颁发者的公钥和过期时间等信息。后面两个可以通过付费到具有公信力的颁发机构颁发证书的方式解决。网址匹配有点麻烦,网址一般填写在证书的Common Name上面,因此网址与域名是一一对应的关系。而多个不同的域名可以解析成同一个IP地址,这样如何做到给每个域名都绑定不同的证书?是给每个域名都分配一个服务器,绑定单独的IP地址吗?但是在规模不大的情况下只部署有限的服务器。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 10票) Loading ... Loading ... | 同时归档在:软件技术 | 标签: , , , , |

利用nc工具高效创建TCP/UDP协议的连接

研究网络技术或者验证某个协议传输机制时,经常需要创建一个TCP Server或者Client,必须时经常需要即时写一个。找到一个比较好用的工具,nc,NetCat。可以满足上述需求,只需要一行命令即可创建一个TCP服务端,实现最简单的收取网络数据的功能。

这里有工具的命令详解:Linux nc命令详解。简单用法:

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.90- 10票) Loading ... Loading ... | 同时归档在:IO编程, 实用脚本 | 标签: , , |

跨域访问和防盗链基本原理(二)

二、跨域访问基本原理

在上一篇,介绍了盗链的基本原理和防盗链的解决方案。这里更深入分析一下跨域访问。先看看跨域访问的相关原理:跨网站指令码。维基上面给出了跨站访问的危害性。从这里可以整理出跨站访问的定义:JS脚本在浏览器端发起的请求其他域(名)下的网站数据的HTTP请求。

这里要与referer区分开,referer是浏览器的行为,所有浏览器发出的请求都不会存在安全风险。而由网页加载的脚本发起请求则会不可控,甚至可以截获用户数据传输到其他站点。referer方式拉取其他网站的数据也是跨域,但是这个是由浏览器请求整个资源,资源请求到后,客户端的脚本并不能操纵这份数据,只能用来呈现。但是很多时候,我们都需要发起请求到其他站点动态获取数据,并将获取到底数据进行进一步的处理,这也就是跨域访问的需求。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.83- 6票) Loading ... Loading ... | 同时归档在:建站技术 | 标签: , |

跨域访问和防盗链基本原理(一)

一、什么是防盗链

网站资源都有域的概念,浏览器加载一个站点时,首先加载这个站点的首页,一般是index.html或者index.php等。页面加载,如果仅仅是加载一个index.html页面,那么该页面里面只有文本,最终浏览器只能呈现一个文本页面。丰富的多媒体信息无法在站点上面展现。

那么我们看到的各类元素丰富的网页是如何在浏览器端生成并呈现的?其实,index.html在被解析时,浏览器会识别页面源码中的img,script等标签,标签内部一般会有src属性,src属性一般是一个绝对的URL地址或者相对本域的地址。浏览器会识别各种情况,并最终得到该资源的唯一地址,加载该资源。具体的加载过程就是对该资源的URL发起一个获取数据的请求,也就是GET请求。各种丰富的资源组成整个页面,浏览器按照html语法指定的格式排列获取到各类资源,最终呈现一个完整的页面。因此一个网页是由很多次请求,获取众多资源形成的,整个浏览器在一次网页呈现中会有很多次GET请求获取各个标签下的src资源。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.91- 11票) Loading ... Loading ... | 同时归档在:建站技术 | 标签: , |
返回顶部