翻譯: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');

點擊此處可訪問完整的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);
    });
});

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM