ws.io

Node.js 的 WebSocket 模块
授权协议 MIT
开发语言 JavaScript
所属分类 Web应用开发、 Node.js 扩展
软件类型 开源软件
地区 不详
投 递 者 戚明朗
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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);
  • WS 客户端1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie

  • 首先说一下报错原因,由于默认60s无消息交互就会关闭长连接,所以导致这个报错 解决方案其实也很简单,既然是长时间没有通信导致断开,其实保持通信就好,可以设置心跳时间来解决。 可以前端也可以后端,附上前端代码吧 //心跳检测 var heartCheck = {     timeout: 60000,//60秒     timeoutObj: null,     serverTimeoutObj:

  • 安装 npm install socket.io    # 写这篇文档时: "socket.io": "^4.5.4" 快捷使用 备注:通过快捷使用的例子,就可以走通websocket的流程了。 node服务器端: import * as express from "express"; import { createServer } from "http"; import { Server } f

  • 一、环境说明 文档地址:socket.io 服务端使用express+ts 客户端使用vue3+ts 二、基本使用 1.服务端 安装socket.io npm i socket.io -S 参考代码 import express from 'express'; import { Server } from 'socket.io'; import http from 'http'; const a

 相关资料
  • WebSockets是Web应用程序的下一代双向通信技术,可在单个套接字上运行,并通过HTML 5兼容浏览器中的JavaScript接口公开。 一旦与Web服务器建立Web Socket连接,就可以通过调用send()方法将数据从浏览器发送到服务器,并通过onmessage事件处理程序从服务器接收数据到浏览器。 以下是创建新WebSocket对象的API。 var Socket = new Web

  • 我收到这个错误,说SSL验证失败。 我已经试过了: 所以我发现了这个问题,如何创建Python安全websocket客户端请求?并使用此代码执行步骤 但随后发生NameError: 我试着添加了一个例外(这很可笑,但还是...)这导致了SyntaxError。 其他作用域 我尝试了使用wss://的不同websocket API,但在第一段代码中工作得很好。 条件: 我在websockets.or

  • 本文向大家介绍node.js ws模块搭建websocket服务端的方法示例,包括了node.js ws模块搭建websocket服务端的方法示例的使用技巧和注意事项,需要的朋友参考一下 首先下载websocket模块,命令行输入 node.js的 模块ws,可用于创建websocket服务,基本的express 和 http模块的使用 创建好服务之后,websocket 服务通过监听 messa

  • webSockets 是一种创建持久性的连接,并进行双向数据传输的 HTTP 通信协议。Weex 提供了 webSockets 模块方便用户在 H5/iOS/Android 环境下与服务端创建 webSockets 链接进行通信。 注意 h5 提供 WebSockets 的 protocol 默认实现,iOS 和 Android 需要自定义实现,Android 可参考: DefaultWebSoc

  • WebSocket 服务基于现有 swoole ws server 上的进一步封装实现。即开启 websocket 服务的同时可以处理 http 请求。 安装 Composer 安装 composer require swoft/websocket-server Git 仓库 Github https://github.com/swoft-cloud/swoft-websocket-server

  • Swoole框架提供了WebSocket协议的实现。具体代码可以参考 examples/websocket_server.php和examples/websocket_client.hml。 如何使用 应用程序代码只需要继承 Swoole\Network\Protocol\WebSocket,并实现onMessage方法即可。onMessage方法在服务器端收到客户端消息时回调。Swoole框架已

  • 本章涵盖了如下内容: WebSockets ChannelHandler, Decoder 和 Encoder 引导你的应用程序 real-time web(实时web)是一组技术和实践,使用户能够实时地接收 到作者发布的信息,而不需要用户用他们的软件定期检查更新源。 HTTP 的请求/响应的设计并不能满足实时的需求,而 WebSocket 协议从设计以来就提供双向数据传输,允许客户和服务器在任何

  • 更改历史 * 2018-06-10 胡小根 初始化文档 1 历史、现状和发展 1.1 历史 1.2 现状 1.3 发展 难点:预测发展方向。 2 安装和使用 2.1 安装 2.2 使用 2.2.2 调试 Simple WebSocket Client 2.3 示例 2.4 最佳实践 难点:最佳实践,超出于示例,应该归纳总结出积累的技巧。 3 同类技术对比 难点:归纳比对项 参考资料