Node.js 的 WebSocket 模块 ws.io

码农软件 · 软件分类 · Node.js 扩展 · 2019-04-15 15:13:19

软件介绍

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:

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

  2. broadcast to all but not me

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

  4. join/leave/in room

  5. in-memory store

Limits:

  1. can only send one Blob/ArrayBuffer within one emit

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

  3. no configuration support

  4. no 3rd party data store support

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

  6. 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(
        "<!DOCTYPE html>"+
        "<html>"+
        "<head>"+
        "<script src='/ws.io/ws.io.js'></script>"+
        "<script>"+
        "var socket = io.connect('ws://localhost:8443');"+
        "socket.on('echo', function(data) {"+
        "    alert(data);"+
        "});"+
        "</script>"+
        "<body>"+
        "<button id='echo'>echo</button>"+
        "</body>"+
        "</html>"+
        "<script>"+
        "var button = document.getElementById('echo');"+
        "button.onclick = function() {"+
        "    socket.emit('echo', 'hello echo server.');"+
        "}"+
        "</script>"
    );
}

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(
        "<!DOCTYPE html>"+
        "<html>"+
        "<meta charset='utf-8'>"+
        "<head>"+
        "<style>"+
        "#panel {"+
        "    border: solid 1px #336699;"+
        "    line-height: 20px;"+
        "    vertical-align: middle;"+
        "    padding: 5px;"+
        "    border-radius: 5px;"+
        "}"+
        "</style>"+
        "<script src='/ws.io/ws.io.js'></script>"+
        "</head>"+
        "<body>"+
        "<input type='file' id='files'><br>"+
        "<div id='panel'><ul id='list'></ul></div>"+
        "</body>"+
        "</html>"+
        "<script>"+
        "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(file);"+
        "        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(file);"+
        "    a.innerHTML = data.filename;"+
        "    a.target = '_blank';"+
        "    var li = document.createElement('li');"+
        "    li.appendChild(a);"+
        "    document.getElementById('list').appendChild(li);"+
        "});"+
        "</script>"
    );
}),
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);

本文地址:https://codercto.com/soft/d/3641.html

Java RESTful Web Service实战

Java RESTful Web Service实战

韩陆 / 机械工业出版社 / 2014-10-1 / 69.00

国内首本完整、深度地讲解如何基于Java标准规范实现REST风格的Web服务的专著,阿里巴巴Java技术专家12年开发经验结晶,3位业内著名技术专家联袂推荐!不仅深刻解读了最新的JAX-RS标准和其API设计,以及Jersey的使用要点和实现原理,而且系统讲解了REST的基本理论,更重要的是从实践角度深度讲解了如何基于Jersey实现完整的、安全的、高性能的REST式的Web服务。 《Jav......一起来看看 《Java RESTful Web Service实战》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具