AI 文件预览

扩展名为 .ai 的文件是 Adobe Illustrator 的文件格式,通过 hexdump 可以发现,它使用 PDF 的格式: stackoverflow 上也有人说 Adobe Illustrator 9 以后的版本 的 .ai 文件都是使用 PDF 格式: https://stackoverflow.com/questions/8208483/parse-adobe-illustrato… 阅读更多 »AI 文件预览

Office Online Server 2016 支持打开加密文件

Office Online Server 2016 和 Office 365 网页版都不支持有打开密码的文件预览。 如何实现加密文件的预览?一些预览服务,如 WPS 在线预览,是支持密码的,但切换的成本比较大。在 Office Online Server 的服务里,我通过 nginx 注入一个 js 文件,对用户行为(打开文档、翻页、停留时间)、预览出错情况做了一些记录,如果更换成其它预览服务,这… 阅读更多 »Office Online Server 2016 支持打开加密文件

Office Web Apps Server 2013 文件预览缓存冲突

最近发现 Office Web Apps Server 2013 文件预览出现缓存冲突的情况。WOPI 接口返回 BaseFileName、OwnerId、Size、SHA256、Version,其中 SHA256 和 Version 都是全局唯一的,如下: 两个完全一样的文档,wopi 的数据是一样的,只是 WOPISrc 不同,但却显示完全不同的内容。 在 console 查看页面的一些参数:… 阅读更多 »Office Web Apps Server 2013 文件预览缓存冲突

Web 推送服务优化之路

  • lovebing 
  • 未分类

最近一段时间,对我负责的 Web 推送服务(基于 Netty-socketio)进行了优化。 目标: 合理使用资源,减少 CPU 和内存使用率 提高稳定性 主要从以下几方面着手: 部署优化 部署到 k8s(Kubernetes),可以很方便地调整 CPU 和内存配置。由于 k8s pod 的会话保持比较麻烦,所以 Socket.IO Client 不能使用 Upgrade 的连接方法。 代码优化 … 阅读更多 »Web 推送服务优化之路

获取 CPU 使用率最高的 Java 线程

  • lovebing 
  • 未分类

最近发现一个服务 JVM CPU 使用率居高不下,想了分析一下原因,于是写了一个 Shell 脚本,用来获取 CPU 使用率最高的Java 线程,然后再使用 jstack 分析。 首先使用 top 查看线程,由于 top 的输入带有控制台的显示格式,对字符串处理有一定的影响,所以需要删掉。使用 hexdump 观察不同字符串长度的格式,发现是有些区别的,所以使用 sed 进行多次替换。 由于服务部… 阅读更多 »获取 CPU 使用率最高的 Java 线程

Socket.IO 协议分析及 Server端最小化实现(Netty)

  • lovebing 
  • 未分类

一、简介 Socket.IO是一个基于事件的实时Web双向通信框架 Azithromycin,兼容所有平台和浏览器。根据浏览器的特性,客户端可以选择不同的方式(Websocket、Ajax长轮询、Jsonp长轮询)连接服务端。 Socket.IO 由两部分组成: 用 Node.js 实现的服务端。 在浏览器端运行的 Javascript 客户端。 Socket.IO 主要特性: 可靠 自动重连 掉… 阅读更多 »Socket.IO 协议分析及 Server端最小化实现(Netty)

Netty服务关闭后无法启动

  • lovebing 
  • 未分类

最近使用 netty-socketio 作为 WebSocket 服务器。重启时发现了一个问题,有时候会无法启动,提示端口被占用,通过 netstat 查看,发现有一堆连接还没有关闭,状态 FIN_WAIT1,需要等这些连接释放后,才能启动 Netty。 需要修改一下 FIN 的超时间,默认是60秒。

MongoSpark 实现 upsert 操作

Spark 版本: 2.1 通常我们经过各种算得到 RDD,MongoSpark 没有有直接提供 upsert 或 update 的方法,因为保存 RDD使用的是 insertMany的方法。但是 WriteConfig 提供了一个 replaceDocument 的参数,仅对 Dataset 有效,当存在 _id 字段的时候,可以实现 replace 或 upsert 的功能… 阅读更多 »MongoSpark 实现 upsert 操作