翻译: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 ...
随机推荐
- SQL: Cannot create JDBC driver of class '' for connect URL
使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台: 数据库连接池在不启动Tomcat的情况下,测试类通过,没有问题. 一旦在服务器发布,就会出现问题,考虑是Tomca ...
- java36
1.Main public static void main(String [ ] args) public:被jvm调用的方法,权限要足够大 static:被jvm调用的方法,不需要创建对象,直接用 ...
- Vue 获取登录用户名
本来是打算登录的时候把用户名传过去,试了几次都没成功,然后改成用cookie保存用户名,然后在读取就行了, 登录时候设置cookie setCookie(c_name,c_pwd,exdays) { ...
- cerr与cout区别
语言:C++ 一.简介 平常常会用的主要有三个:cout.cerr.clog,首先简单介绍下三者. 这三者在C++中都是标准IO库中提供的输出工具(至于有关的重载问题在此不讨论): cout:写到标准 ...
- go基本使用方法
一,变量 var:声明变: var 变量名 数据类型 :同时还需要指定数据的类型 var 变量名 = 值 : 声明变量,根据变量值判断变量类型 := :省略var,直接可以(变量名:= 值), ...
- web应用/路由控制/视图函数/单表多表操作
一. 1.wen应用:BS架构的应用程序,B是浏览器,S:server(实现了wsgi协议)+ application https://www.cnblogs.com/liuqingzheng/art ...
- Win7 VS2017 Boost Python入门
闲来无事想练习下用Python作为游戏脚本绑定到C++,网上搜了下,Python文档有些例子,但是太过复杂,gayhub无意中看到有人用Boost Python绑定,简单粗暴,省时省力,记录备忘. 写 ...
- apache学习笔记
httpd -k restart -n apache24 [注意在wamp下名字叫wampapache] http://blog.sina.com.cn/s/blog_692a024c0102vuq ...
- mybatis批量更新报错badsql
mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...
- Postman+Newman+jenkins实现API自动化测试
最近自己在学习用postman+newman+jenkins实现API自动化测试,这里做个回顾和记录.(此次是在windows上进行的环境搭建) 一.说明 1.大致思路:利用postman做接口调试所 ...