什么是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');

点击此处可访问完整的example代码

SockJS-node API

SockJS的API是建立在NodeJS的通用API之上,如 Steams APIHttp.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文档(一)的更多相关文章

  1. 中文翻译:pjsip文档(四)之ICE Session的使用方法

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  2. YUV视频格式详解(翻译自微软文档)

    原文: https://docs.microsoft.com/en-us/previous-versions/aa904813(v=vs.80) YUV视频格式详解(翻译自微软文档)https://b ...

  3. 使用 Python 翻译 CHM 帮助文档

    此方法绝对切实可行 翻译成品项目: https://github.com/foyoux/InstallShield2020-Documents 效果预览 安装 docts 库 pip install ...

  4. [翻译] Autofac 入门文档

    原文链接:http://docs.autofac.org/en/latest/getting-started/index.html 在程序中使用Autofac的基本模式是: 用控制反转(IoC)的思想 ...

  5. HugePages概述--翻译自19C文档

    翻译自: https://docs.oracle.com/en/database/oracle/oracle-database/19/unxar/administering-oracle-databa ...

  6. React翻译官网文档之JSX

    什么是JSX? 看下面的代码它被称为JSX,它既不是字符串也不是HTML,而是一种facebook公司对javascript语法的拓展.虽然写法很奇怪最终仍会会被编译为javascript代码 con ...

  7. Ext JS 6学习文档–第1章–ExtJS入门指南

    Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS ...

  8. python文档自动翻译

    关键方法 提取文档内容 读取TXT文档 txt文档的读取很简单,直接用python自带的open()方法就好,代码如下所示: # 读取TXT文档 def read_txt(path): '''实现TX ...

  9. CocoaAsyncSocket 文档1:Socket简单介绍

    前言 CocoaAsyncSocket是 IOS下广泛应用的Socket三方库,网上相关样例数不胜数.这里我就不直接上代码,本文由B9班的真高兴发表于CSDN博客.另辟一条思路:翻译SocketAsy ...

随机推荐

  1. Centos7搭建SS以及加速配置的操作记录 (转载)

    原文地址https://www.cnblogs.com/kevingrace/p/8495424.html 部署 Shadowsocks之前,对它做了一个简单的了解,下面先介绍下.一道隐形的墙众所周知 ...

  2. SHELL脚本学习-练习写一个脚本3

    #通过ping命令测试192.168.1段的所有主机是否在线,如果在线就显示is up并显示蓝色,如果不在线就显示is down. #!/bin/bash #Program Description: ...

  3. linux下安装srilm

    1.安装相关依赖库 a.c/c++ compiler:编译器gcc 3.4.3及以上版本   b.GNU make:构建和管理工程的工具,解释Makefile里的指令,描述了整个工程所有文件的编译顺序 ...

  4. 优雅的找出ArrayList中重复的元素

    https://blog.csdn.net/caoxiaohong1005/article/details/54286384

  5. 《Java核心技术卷1》拾遗

    之前对Java的基础知识有过学习,现在开始学习<Java核心技术卷1>,将一些新学的知识点,做简要记录,以备后续回顾: 1.double (1)所有的“非数值”都认为是不相同的 if(x= ...

  6. freeMark模板引擎

    http://blog.csdn.net/shimiso/article/details/8778793

  7. linux 解压 压缩 常见命令

    压缩命令: .tar tar -cvf 文件名称.tar 文件或者文件夹 .tar.gz tar -zcvf 文件名称.tar.gz 文件或者文件夹 .tar.xz tar -Jcf 文件名称.tar ...

  8. Slot使用

    1.组件中有单个或多个未命名slot标签时,如下:<Child><span style=”color:red;”>hello world</span></Ch ...

  9. python 从基础到入门链接

    机器学习篇: 先看的 简书 木子昭的机器学习三剑客 : https://www.jianshu.com/u/c5d047065c42 然后看完之后又发现一个很好的链接, nkwy2012博主提供了很多 ...

  10. QEMU KVM libvirt 手册(1): 安装

    安装 对虚拟化的支持通常在BIOS中是禁掉的,必须开启才可以. 对于Intel CPU,我们可以通过下面的命令查看是否支持虚拟化. # grep "vmx" /proc/cpuin ...