nodejs-websocket, web socket服务器和客户端的node.js 模块

分享于 

11分钟阅读

GitHub

  繁體 雙語
A node.js module for websocket server and client
  • 源代码名称:nodejs-websocket
  • 源代码网址:http://www.github.com/sitegui/nodejs-websocket
  • nodejs-websocket源代码文档
  • nodejs-websocket源代码下载
  • Git URL:
    git://www.github.com/sitegui/nodejs-websocket.git
    Git Clone代码到本地:
    git clone http://www.github.com/sitegui/nodejs-websocket
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/sitegui/nodejs-websocket
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Nodejs web socket

    Build StatusInline docsDependency Status

    web socket服务器和客户端的nodejs模块

    如何使用它

    使用 npm install nodejs-websocket 安装,或者将所有文件放在名为"nodejs-web socket"的文件夹中,并且:

    var ws =require("nodejs-websocket")// Scream server example:"hi" ->"HI!!!"var server =ws.createServer(function (conn) {
     console.log("New connection")
     conn.on("text", function (str) {
     console.log("Received "+str)
     conn.sendText(str.toUpperCase()+"!!!")
     })
     conn.on("close", function (code, reason) {
     console.log("Connection closed")
     })
    }).listen(8001)

    文件夹示例中的其他示例

    require("nodejs-websocket") 返回的主对象。

    ws.createServer( [options], [callback] )

    返回一个新的Server 对象。

    options 是一个可选对象,将被交给 net.createServer() 以创建普通套接字。 如果它具有名为 true的属性"安全",则将使用 tls.createServer()。

    为了支持协议,options 对象可能具有以下属性之一:

    • validProtocols: 服务器接受的协议名称的array。 服务器将在客户端列表中选择最首选的协议。
    • selectProtocol: 解决协议协商的回调。 这里回调将传递两个参数: 连接处理握手和由客户端通知的协议名称的array,按优先顺序排序。 它应该返回已经解析的协议,如果没有协议,则返回空。

    callback 是一个自动添加到 "connection" 事件中的函数。

    ws.connect(URL, [options], [callback] )

    返回一个新的Connection 对象,代表一个 web socket客户端连接

    URL 是格式为"ws://localhost:8000/chat"的字符串( 可以省略端口)

    options 是一个将传递给 net.connect() ( 或者 tls.connect() 如果协议是"的对象:")。 属性"主机"和"端口"将从 URL 中读取。 可选属性 extraHeaders 将用于向HTTP握手请求添加更多头。 如果存在,它必须是一个对象,如 {'X-My-Header':'value'}。 可选属性 protocols 将在握手( 作为"sec-websocket-protocol"页眉) 中使用,以允许服务器选择这些值之一。 如果存在,它必须是字符串的array。

    callback 将作为"连接"侦听器添加

    ws.setBinaryFragmentation(bytes )

    将一组二进制数据的最小大小设置为在单个帧中发送( 默认值: 512 kiB )

    ws.setMaxBufferLength(bytes )

    设置内部缓冲区可以增长的最大大小( 默认值: 2 MiB ( 如果任何时候保持大于这里值),连接将被代码 1009关闭,这是一个安全措施,避免内存攻击。

    电子邮件服务器

    表示 web socket服务器的类,与HTTP服务器非常类似

    server.listen(port, [host], [callback] )

    开始接受给定 porthost 上的连接。

    如果省略 host,服务器将接受指向任何IPv4地址( INADDR_ANY )的连接。

    一个 port 值零将分配一个随机端口。

    callback 将作为 'listening' 事件的侦听器添加。

    server.close( [callback] )

    停止服务器接受新连接并保留现有连接。 这里函数是异步的,当所有连接结束并且服务器发出'关闭'事件时,服务器最终关闭。 当'关闭'事件发生后,将调用可选的回调。

    server.socket

    由 net.createServer 或者 tls.createServer 返回的基础套接字

    server.connections

    具有所有连接客户端的array。 它对广播消息很有用:

    functionbroadcast(server, msg) {
     server.connections.forEach(function (conn) {
     conn.sendText(msg)
     })
    }

    事件:'listening()"'

    在调用 server.listen 后绑定服务器时发出

    事件:'close()"'

    服务器关闭时发出。 如果连接存在,则在所有连接完全结束之前,不会发出这里事件。

    事件:'错误( errObj )"'

    发生错误时发出。 将在此事件之后直接调用'关闭'事件。

    事件:'连接( 连接接口)"'

    当成功地创建新连接时发出。 连接是连接的一个实例

    拨号连接

    表示连接的类,即客户端创建的( 由 nodejs ws服务器接受) 或者客户端连接。 web socket协议有两种类型的数据帧: 文本和二进制。文本框架实现为简单发送函数和接收事件。 二进制帧作为流实现: 接收二进制数据时,得到 ReadableStream ;要发送二进制数据,必须请求WritableStream并写入它。 二进制数据将被划分为帧并通过套接字发送。

    发送二进制数据时无法发送文本数据。 如果你尝试这样做,连接将发出"错误"事件

    connection.sendText(str, [callback] )

    将给定字符串发送到另一端。 你不能在二进制传输的中间发送文本数据。

    callback 将作为侦听器添加,以便在套接字上写入操作

    connection.beginBinary( )

    请求连接开始传输二进制数据。 返回 WritableStream。二进制传输将在WritableStream完成时结束( 比如在调用. end 时调用)

    connection.sendBinary(data, [callback] )

    发送单个二进制数据块( 如调用 connection.beginBinary(). end(data) )

    callback 将作为侦听器添加,以便在套接字上写入操作

    connection.send(data, [callback] )

    将给定的字符串或者缓冲区发送到另一个。 如果数据是字符串,则为 sendText()的别名,如果数据为缓冲区,则为 sendBinary()

    callback 将作为侦听器添加,以便在套接字上写入操作

    connection.sendPing( [data=''] )

    发送带有可选负载的 ping插件

    connection.close( [code, [reason] ] )

    开始结束握手( 发送关闭帧)

    connection.socket

    基础网络或者tls套接字

    connection.server

    如果连接被nodejs服务器接受,将在这里保存对它的引用。 空

    connection.readyState

    其中一个常量,表示连接的当前状态。 只有打开的连接才能发送/接收数据。

    • connection.CONNECTING ( 等待握手完成)
    • connection.OPEN
    • connection.CLOSING ( 等待关闭帧的答案)
    • connection.CLOSED

    connection.outStream

    存储由 connection.beginBinary() 返回的OutStream对象。 如果未发送当前二进制数据,则为空。

    connection.path

    对于服务器接受的连接,它是表示连接路径的字符串( 例如: "/chat") 否则为空

    connection.headers

    只读取标题名称和值的映射。 头名称的大小写较低

    connection.protocols

    客户端请求的协议的array。 如果没有请求协议,它将是空的array。

    web socket subprotocols的其他资源:

    connection.protocol

    如果有任何协议,则协议同意这里连接。 它将是 connection.protocols的一个元素。

    事件:'关闭( 代码,原因)"'

    当连接被任何一方关闭时发出

    事件:'错误( 错误)"'

    出现错误(。像尝试发送二进制数据时发送文本数据一样) 时发出。 如果出现无效的握手响应也将是 emited。

    事件:'文本( str )"'

    收到文本时发出。 str 是字符串

    事件:'二进制( inStream )"'

    接收二进制数据的开始时发出。 inStream 是一个 ReadableStream插件:

    var server =ws.createServer(function (conn) {
     console.log("New connection")
     conn.on("binary", function (inStream) {
     // Empty buffer for collecting binary datavar data =newBuffer(0)
     // Read chunks of binary data and add to the bufferinStream.on("readable", function () {
     var newData =inStream.read()
     if (newData)
     data =Buffer.concat([data, newData], data.length+newData.length)
     })
     inStream.on("end", function () {
     console.log("Received "+data.length+" bytes of binary data")
     process_my_data(data)
     })
     })
     conn.on("close", function (code, reason) {
     console.log("Connection closed")
     })
    }).listen(8001)

    事件:'connect()"'

    在完全建立连接时发出( 握手后)

    事件:'pong ( 数据)"'

    在接收到 pong 时发出,通常在发送ping后发出。 data 是一个pong有效负载,作为一个字符串


    相关文章