翻译:SockJS-node文档(一)
什么是SockJS?
SockJS是一个提供Websocket通信的JavaScript库,目的是实现在浏览器与服务器之间低延迟、全双工、跨域通信,它提供跨浏览器的统一API,即使不支持HTML5 Websocket的浏览器也能通过SockJS实现Websocket通信,SockJS支持不同的后端脚本语音,包括NodeJS、Python、Java等,这里主要介绍SockJS-node,即支持NodeJS的版本。
SockJS-node server
SockJS-node 是浏览器端运行的SockJS-client库对应的服务端,由CoffeeScript编写。
安装sockjs-node,首先确认你的机器已经安装NodeJS,然后执行:
npm install sockjs
你或许有安全方面的考虑,可以安装rbytes库,SockJS将在rbytes可用时用到它,当然,如果不安装rbytes或安装失败,也不会影响SockJS的正常使用:
npm install rbytes
下列的语句将创建一个简单的SockJS服务端:
var http = require('http');
var sockjs = require('sockjs'); var echo = sockjs.createServer();
echo.on('connection', function(conn) {
conn.on('data', function(message) {
conn.write(message);
});
conn.on('close', function() {});
}); var server = http.createServer();
echo.installHandlers(server, {prefix:'/echo'});
server.listen(9999, '0.0.0.0');
SockJS-node API
SockJS的API是建立在NodeJS的通用API之上,如 Steams API 和Http.Server API。
Server class
与NodeJS的http.createServer模块类似,SockJS通过以下语句创建一个Server类:
var sockjs_server = sockjs.createServer(options);
options是一个散列数组,可以包含以下属性:
sockjs_url (string, required)
不支持跨域通信的传输协议通过使用iframe技巧来实现跨域处理。浏览器从外部域SockJS server获取一个简单的页面,然后置于一个不可见额iframe里,在这个iframe中运行的code不会有跨域的问题。
prefix (string)
response_limit (integer)
websocket (boolean)
jsessionid (boolean or function)
log (function(severity, message))
heartbeat_delay (milliseconds)
disconnect_delay (milliseconds)
Server instance
声明SockJS Server的实例,便可与http.Server的实例耦合
var http_server = http.createServer();
sockjs_server.installHandlers(http_server, options);
http_server.listen(...);
其中的option可以覆盖创建Server实例时的option。
Server实例是一个 EventEmitter,可以执行以下事件
Event: connection (connection)
成功建立于客户端的连接
不在prefix定义的path之下的所有http请求将不会被SockJS Server应答,并且会被转移至之前注册的handler处理,所以,在执行installhandlers之前,必须声明自定义的http handler
Connection instance
connection实例支持NodeJS的Steams API,包括以下方法和属性:
- 属性: readable (boolean)
- 属性: writable (boolean)
- 属性: remoteAddress (string)
- 属性: remotePort (number)
- 属性: address (object)
- 属性: headers (object)
- 属性: url (string)
- 属性: pathname (string)
- 属性: prefix (string)
- 属性: protocol (string)
- 属性: readyState (integer)
- write(message)
- close([code], [reason])
- end()
Connection实例可执行以下事件(Events):
- 事件: data (message)
- 事件: close ()
example:
sockjs_server.on('connection', function(conn) {
console.log('connection' + conn);
conn.on('close', function() {
console.log('close ' + conn);
});
conn.on('data', function(message) {
console.log('message ' + conn,
message);
});
});
翻译:SockJS-node文档(一)的更多相关文章
- 中文翻译:pjsip文档(四)之ICE Session的使用方法
1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...
- YUV视频格式详解(翻译自微软文档)
原文: https://docs.microsoft.com/en-us/previous-versions/aa904813(v=vs.80) YUV视频格式详解(翻译自微软文档)https://b ...
- 使用 Python 翻译 CHM 帮助文档
此方法绝对切实可行 翻译成品项目: https://github.com/foyoux/InstallShield2020-Documents 效果预览 安装 docts 库 pip install ...
- [翻译] Autofac 入门文档
原文链接:http://docs.autofac.org/en/latest/getting-started/index.html 在程序中使用Autofac的基本模式是: 用控制反转(IoC)的思想 ...
- HugePages概述--翻译自19C文档
翻译自: https://docs.oracle.com/en/database/oracle/oracle-database/19/unxar/administering-oracle-databa ...
- React翻译官网文档之JSX
什么是JSX? 看下面的代码它被称为JSX,它既不是字符串也不是HTML,而是一种facebook公司对javascript语法的拓展.虽然写法很奇怪最终仍会会被编译为javascript代码 con ...
- Ext JS 6学习文档–第1章–ExtJS入门指南
Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS ...
- python文档自动翻译
关键方法 提取文档内容 读取TXT文档 txt文档的读取很简单,直接用python自带的open()方法就好,代码如下所示: # 读取TXT文档 def read_txt(path): '''实现TX ...
- CocoaAsyncSocket 文档1:Socket简单介绍
前言 CocoaAsyncSocket是 IOS下广泛应用的Socket三方库,网上相关样例数不胜数.这里我就不直接上代码,本文由B9班的真高兴发表于CSDN博客.另辟一条思路:翻译SocketAsy ...
随机推荐
- linux下安装srilm
1.安装相关依赖库 a.c/c++ compiler:编译器gcc 3.4.3及以上版本 b.GNU make:构建和管理工程的工具,解释Makefile里的指令,描述了整个工程所有文件的编译顺序 ...
- Python3.7 Scrapy crawl 运行出错解决方法
安装的是Python3.7,装上依赖包和scrapy后运行爬虫命令出错 File "D:\Python37\lib\site-packages\scrapy\extensions\telne ...
- Alpha冲刺四
第四天 日期:2018/6/19 1.1 今日完成任务情况以及遇到的问题. 成员 汝春瑞.曹 阳 赵红波.梁玉龙 傅 康.丁炜轩 今日完成任务 设计餐厅每个店家的餐品界面 完成公告和失物招领 ...
- C#将结构体和指针互转的方法
. 功能及位置 将数据从托管对象封送到非托管内存块,属于.NET Framework 类库 命名空间:System.Runtime.InteropServices 程序集:mscorlib(在 msc ...
- 20155312 张竞予 Exp2 后门原理与实践
Exp2 后门原理与实践 目录 基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? (2)例举你知道的后门如何启动起来(win及linux)的方式? (3)Meterpreter有哪 ...
- 解决Xcode8模拟器无法删除应用的问题
关闭模拟器的3DTouch.Hardware →Touch Pressure→Use Trackpad Force.
- 《Linux就该这么学》第十八天课程
1.使用MariaDB数据库管理系统 今天没什么笔记,就不发了.想深入学习的可以前往原创地址:https://www.linuxprobe.com/chapter-18.html 图18-1 Mari ...
- 强联通分量-tarjan算法
定义:在一张有向图中,两个点可以相互到达,则称这两个点强连通:一张有向图上任意两个点可以相互到达,则称这张图为强连通图:非强连通图有极大的强连通子图,成为强联通分量. 如图,{1},{6}分别是一个强 ...
- Notes on Distributed System -- Distributed Hash Table Based On Chord
task: 基于Chord实现一个Hash Table 我负责写Node,队友写SuperNode和Client.总体参考paper[Stoica et al., 2001]上的伪代码 FindSuc ...
- RK3288 uboot启动流程
VS-RK3288嵌入式板卡 U-boot 启动流程小结 bl board_init_f -> crt0.S initcall_run_list(init_sequence_f) - ...