当前位置:  软件>JavaScript软件

Node.js 的 WebSocket 模块 ws.io

    来源:    发布时间:2014-12-27

    本文导语:  A simple wrap to node.js ws module and then we can use it in a manner  like socket.io. It's really easy to use socket.io but it doesn't  support Blob yet. So I write a simple wrap to ws module for this  purpose. This is also a part of works from a contest by  ithelp.ithome.com.tw. Features: t...

A simple wrap to node.js ws module and then we can use it in a manner  like socket.io. It's really easy to use socket.io but it doesn't  support Blob yet. So I write a simple wrap to ws module for this  purpose. This is also a part of works from a contest by  ithelp.ithome.com.tw.

Features:
  • trnasfer Blob/ArrayBuffer by put it in an object and emit it just as socket.io

  • broadcast to all but not me

  • emit to specified peer by socket.to(socket.id).emit('event', data)

  • join/leave/in room

  • in-memory store

  • Limits:
  • can only send one Blob/ArrayBuffer within one emit

  • the Blob/ArrayBuffer object must be a property of the emitting object in the first level, no deeper

  • no configuration support

  • no 3rd party data store support

  • cannot scale (due to current sockets management and store design)

  • client support is now through a static url: /ws.io/ws.io.js

  • install
    npm install ws.io
    usage

    a simple echo server. (echo.js)

    var app = require('http').createServer(handler),
    io = require('./ws.io').listen(app);
    app.listen(8443);
    
    function handler (req, res) {
        res.setHeader('Content-Type', 'text/html');
        res.writeHead(200);
        res.end(
            ""+
            ""+
            ""+
            ""+
            ""+
            "var socket = io.connect('ws://localhost:8443');"+
            "socket.on('echo', function(data) {"+
            "    alert(data);"+
            "});"+
            ""+
            ""+
            "echo"+
            ""+
            ""+
            ""+
            "var button = document.getElementById('echo');"+
            "button.onclick = function() {"+
            "    socket.emit('echo', 'hello echo server.');"+
            "}"+
            ""
        );
    }
    
    io.sockets.on('connection', function (socket) {
        socket.on('echo', function(data) {
            socket.emit('echo', data);
        });
    });

    a simple blob sharing through file api. (blob.js)

    var fs = require('fs'),
    url = require('url'),
    app = require('http').createServer(function(req, res) {
        res.setHeader('Content-Type', 'text/html');
        res.writeHead(200);
        res.end(
            ""+
            ""+
            ""+
            ""+
            ""+
            "#panel {"+
            "    border: solid 1px #336699;"+
            "    line-height: 20px;"+
            "    vertical-align: middle;"+
            "    padding: 5px;"+
            "    border-radius: 5px;"+
            "}"+
            ""+
            ""+
            ""+
            ""+
            "
    "+         "
    "+         ""+         ""+         ""+         "var files = document.getElementById('files');"+         "var socket = io.connect('ws://localhost:8443');"+         "function getUrl() {"+         "    if(!!window.URL) {"+         "        return window.URL;"+         "    }"+         "    if(!!window.webkitURL) {"+         "        return window.webkitURL;"+         "    }"+         "}"+         ""+         "files.addEventListener('change', function(e) {"+         "    var URL = getUrl();"+         "    if(files.files.length>0) {"+         "        var file = files.files[0];"+         "        if(file.type==='') {"+         "            alert('File type unknown. Process stopped.');"+         "            return false;"+         "        }"+         "        var src = URL.createObjectURL(/tech-soft-javascript/file/index.html);"+         "        var a = document.createElement('a');"+         "        a.href = src;"+         "        a.innerHTML = file.name;"+         "        a.target = '_blank';"+         "        var li = document.createElement('li');"+         "        li.appendChild(a);"+         "        document.getElementById('list').appendChild(li);"+         "        socket.emit('share', {filename: file.name, type: file.type, file:file});"+         "    }"+         "});"+         "var fileinfo;"+         "socket.on('share', function(data) {"+         "    var URL = getUrl();"+         "    var a = document.createElement('a');"+         "    var file = new Blob([data.file], {type:data.type});"+         "    a.href = URL.createObjectURL(/tech-soft-javascript/file/index.html);"+         "    a.innerHTML = data.filename;"+         "    a.target = '_blank';"+         "    var li = document.createElement('li');"+         "    li.appendChild(a);"+         "    document.getElementById('list').appendChild(li);"+         "});"+         ""     ); }), io = require('ws.io').listen(app); io.sockets.on('connection', function(socket) {     socket.on('share', function(data) {         socket.broadcast.emit('share', data);     }); }); app.listen(8443);

        
     
     

    您可能感兴趣的文章:

  • WebSocket-Node
  • Node情感分析模块 sentiment
  • Node.js 模块化加载 Browserify
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • node.js的.net扩展 node.net
  • iOS上的Node.js Node.app
  • 七牛 Node.js SDK Node-qiniu
  • Node.JS XML 解析 node-elementtree
  • Node.js 的 FTP 客户端 node-ftp
  • Node.js在Android上的移植 node4android
  • Node.js 的MVC框架 Locomotive JS
  • Node.js web 框架 partial.js
  • Node.js的C++移植版本 Node.native
  • Node.js 的MVC框架 total.js
  • Node.js 数据库实时监控库 node-dbmon
  • Node.js的高性能封装 Express.js
  • Node.js 的 MVC 框架 Sleek.js
  • Redis的Node.js扩展包 node_redis
  • Node.js 测试框架 Frisby.js
  • Node.js 开发框架 Web.js
  • 基于Node.js的Java虚拟机 node-jvm
  • Node.js 服务器端框架 Hapi.js
  • Node.js API 框架 actionHero.js
  • Node.js 游戏引擎 Odin.js
  • java命名空间javax.xml.xpath类xpathconstants成员方法: node定义参考
  • Node.js 的 SOAP 客户端和服务器 Node-SOAP
  • java命名空间javax.xml.soap接口node成员方法: getparentelement定义参考
  • eos 的 Node.js 开发包 node-eos
  • java命名空间javax.xml.soap接口node成员方法: detachnode定义参考
  • 关于XML中NODE的类型的问题(特急!!!)
  • java命名空间javax.xml.soap接口node成员方法: recyclenode定义参考
  • BitNami Node.js Stack
  • java命名空间java.util类uuid的类成员方法: node定义及介绍
  • 基于 Node.js 的 DHT 实现 Kademlia
  • java命名空间javax.xml.soap接口node成员方法: setparentelement定义参考


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3