惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
S
SegmentFault 最新的问题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
美团技术团队
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
博客园_首页
宝玉的分享
宝玉的分享
C
Check Point Blog
爱范儿
爱范儿
MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
U
Unit 42
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
博客园 - Franky
博客园 - 【当耐特】
腾讯CDC
N
Netflix TechBlog - Medium
Jina AI
Jina AI
博客园 - 司徒正美
Last Week in AI
Last Week in AI
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
J
Java Code Geeks
Cloudbric
Cloudbric
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
F
Full Disclosure
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
Security Affairs
Recent Announcements
Recent Announcements
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Secure Thoughts

囧克斯

奔四了,写给40岁的自己 有序退网 我和 Vue.js 的十年 我参与《代码之外 Beyond Code》的故事 博客站迁移至 VitePress 的备忘 写给我的奶奶 中文格式化小工具 zhlint 及其开发心得 vue-mark-display:用 markdown 语法轻松撰写幻灯片 我对技术会议的一些看法 VueConf Hangzhou 见闻 第四届 CSSConf CN 见闻 [译]Web 表单的未来 [译]苹果正在做一些他们的程序员明摆着不想要的东西 [译]为什么我不会无偿加班且你也不应该 [译]如果管理是唯一可走的路,那就完蛋了 [译]如何撰写 Git 提交信息 [译]C 程序的原则 Vue 2.0 来了! Weex 近 4 个月的开源之路 Weex 在 JS Runtime 内的多实例管理 我理解的 SPA 我理解的 Flux 架构 【整理】Vue 2.0 自 beta 1 到 beta 4 以来的主要更新 通过一张图走进 Vue 2.0 Code Review for Vue 2.0 Preview Vue 2.0 发布啦! 务实的小而美 Vue.js 1.0.0 发布了! [译]如何成为一名卓越的前端工程师 手机淘宝前端的图片相关工作流程梳理 [译]如何让办公室政治最小化 Vue.js 源码学习笔记 从原型到发布——“团队时间线” 1.0 开发心得 Vue + webpack 项目实践 用 Koa 写服务体验 webcomponents 笔记 之 配置管理 小秀个人的13~14年摄影作品 (共19张) 由今年D2前端论坛想到的 [译]CSS命名神马的真心难 [译]Git 分支的最佳实践 [译]撰写可测试的 JavaScript [译]语义化版本管理 [译]通过HTML5 Canvas API调节图像的亮度和颜色 [译]JavaScript V8性能小贴士 [译]视觉差,走起! [译]Chrome开发者工具中评估性能的五大新特性 精气神儿 细节无微不至,彩屏让人又爱又恨——新老“神机”大对决:Nokia 1050 vs Nokia 1202 秦升拿到红牌之后…… 用Sass重新整理自己的博客主题样式 Connect中间件使用手册 巧用 RequireJS Optimizer 给传统的前端项目打包 编辑器小调查结果 [译]JSLint 文档 烟火——写给蛇年的傲游和我 小秀个人的全年摄影作品 (共15张) 2012年终毫无正能量的总结 标签?ID?还是CLASS? 微创新=伪创新 HTML5峰会归来 分享bookmarklet一则:随意阅读 国际羽联和中国队之间的恶性循环 ZeroClipboard 学习笔记 “思考人生” 听杨东杰弹吉他 学习精髓 网站装修笔记20120426 网站装修笔记20120414 网站装修笔记20120406 分享Typecho插件:百度统计助手 我的得奖感言 网站装修笔记20120331 用CSS3制作尖角标签按钮样式 分享Typecho插件:Markdown 解析器 + 编辑器 分享Typecho皮肤:我的字很大 汇总自己过去的一些HTML5科普文章 网站装修计划 Typed Arrays 是神马? 文明看球 HTML5中的文件处理 之 File Writer API HTML5中的文件处理 之 File API 独生子女、互相等和不耐烦 IndexedDB技术简介(四) IndexedDB技术简介(三) IndexedDB技术简介(二) IndexedDB技术简介(一) 把博客的字体进一步调大,同时去掉了侧边栏 “模仿别人是为了找到自己” 写给我未婚妻的2011年 写给自己的2011年 手把手教你入门EaselJS做HTML5动画 “吃了吧,不吃就浪费了” 写给傲游的2011年 所谓专业 写给HTML5的2011年 对HTML5中LocalStorage的一些使用建议 回味一下我2011年看到的最过瘾的5场足球比赛 浅浅浅谈开饭店被顾客吃出“异物”的用户体验 前端的本职 继续对Mac穷追猛打 之 修改原生按钮文字大小的技巧
html5中的消息通信简介 + 我的新网站开张
勾三股四 · 2012-03-24 · via 囧克斯

本文摘自 勾三股四 更早时期的 不老歌 博客。


随着网页时效性需求的增强和其所涉及范围的扩大,各种消息通信的运用越来越多。在html5中,有很一部分消息通信的新规范,旨在让这些工作更加方便实用。接下来会为大家介绍4个比较主要的通信方式:

* WebSocket
* Server-Sent Event
* Cross-Document Messaging
* Channel Messaging

WebSocket

这个技术已经被越来越多的人注意到了。长连接一直以来一直是web的一个盲区,而WebSocket让网页通过几个简单的js接口,就可以和服务器建立长连接;另外一个好处,也是长连接随之带来的,就是省掉了每次传统请求中的HTTP头、cookies等信息的冗余传输。

WebSocket的新知识分两部分:一部分是浏览器端的js接口定义,方便前端开发调用;另一部分是WebSocket协议,对浏览器相关js接口的底层实现和服务器端的配合提出了明确的要求,这部分主要是服务器开发和浏览器开发需要比较关注,对前端开发者影响不大。

WebSocket的大致js接口设计如下:

socket = new WebSocket(url[, protocols]);
socket.url;
socket.readyState; // CONNECTING|OPEN|CLOSING|CLOSED
socket.send(...); // string|arraybuffer|blob
socket.onmessage = function (e) {
e.data;
};
socket.onopen = function (e) {...};
socket.onerror = function (e) {...};
socket.onclose = function (e) {...};

更详细的介绍可以移步到:http://www.w3.org/TR/websockets/

Server-Sent Event

顾名思义,这个新特性可以允许服务器更方便的主动发送信息给浏览器。从量级上看,这个比WebSocket更轻量级一些,但它的好处也很明显。首先,它不需要特殊的协议和特殊的服务器语言,现行的主流技术完全可以应付;第二,它强调的是服务器发送,而不是双向通信,这样开发和实现更简单,更有效率。一个很适用的场景就是微博页面的新微博、新评论、新私信的实时推送。

Server-Sent Event简称作SSE。SSE的使用方法也非常简单:

var source = new EventSource('./sse.php');
source.addEventListener('message', function (e) {e.data;...}, false);
source.addEventListener('add', function (e) {e.data;...}, false);
source.addEventListener('customEventType', function (e) {e.data;...}, false);

然后服务器端返回特定的格式:

echo "event:customEventType"; // 确定事件类型
echo "data:content string here..."; // 返回数据内容
echo "retry:5000" // 5秒之后请求第二次;

就可以配合工作了。

更详细的介绍可以移步到:http://dev.w3.org/html5/eventsource/

Cross-Document Messaging

这个技术主要运用在不同window/worker之间进行消息通信。运行环境比如iframe、webworker、window.open打开的新窗口等。不同网页之间的通信,可以让web元素更多元化的融合在一起。

Cross-Document Messaging的接口用法大致如下:

// on top
iframe.postMessage('hello');

// on iframe
window.onmessage = function (e) {e.data;...}

值得注意的是,这项技术可以解决跨域问题——当然,有个限制,就是被请求的页面通过head信息明确授权跨域访问。

Channel Messaging

这项技术就更加奇妙了,它允许js创建一个频道(channel),每个频道有两个端口(port)对象,这两个端口对象的引用不论通过何种方式传递到何处,只要端口1调用postMessage(data)发个消息,端口2就会立刻收到onmessage事件,反之亦然。大概用法是这样的:

var channel = new MessageChannel();
var port1 = channel.port1;
var port2 = channel.port2;
port1.onmessage = function (e) {e.data;...};
port2.postMessage('Hello Port1!');

Channel Messaging给了我们很大的想象空间,做一些有趣的技术实现。

有关Cross-Document Messaging和Channel Messaging的更详细介绍请移步到:http://www.w3.org/TR/webmessaging/

更多的消息通信内容

希望关注html5消息通信这部分内容的朋友,可以进一步看看这几样东西:一个是WebWorker,以及随之而来的各种同步数据操作接口(之前的接口多半都是异步的,通过回调函数继续处理的,这样的代码比较不够直观,而在worker里不存在“界面卡死”一说,所以就没有必要了),还有就是WebRTC技术,让客户端更加主导通信。

--------

Demo

这里制作了一个简单的demo,涵盖了除WebSocket之外的所有其它3项技术:Cross-Document Messaging、Channel Messaging、Server-Sent Event。目前webkit内核对这部分技术的支持还是比较完善的。另外SSE中的php部分代码很简单,我的php也很烂,拿不出手,就不公开代码了。
http://jiongks.name/demos/web-msg/

--------

我的新网站

好吧,既然新的demo已经分享给大家了,也就不瞒着大家了。我开启了又一个新网站:囧克斯,空间架设在sae上:http://jiongks.sinaapp.com/ 大家也可以通过 http://jiongks.name/ 直接访问,这个域名我前阵子刚买下来。

现在刚开始,里面东西并不多,我放了之前的demo和ppt充数,新网站的一些未来打算我也已经想到了一部分写上去了。另外不知道新设计的皮肤经不经得起大家的审美考验。欢迎大家参观留言助兴 :-)

今后不老歌会继续保持更新,但也会考虑把内容和访问量逐渐迁移引导过去。

恩,就是这么多了。