使用Socket.IO可以避免webSocket产生的问题;

传输:

  • Socket.IO中消息的传递是基于传输的,而非全部依靠WebSocket;
  • 它总会尝试选择对用户来说速度最快、对服务器性能来说最好的方法来建立连接;
  • 要是条件达不到,那么首先会保证连接正常;

断开VS关闭: //对超时的支持

  • Socket.IO监听的是connect事件而不是open事件;是discounnect事件而不是close事件;
  • 若客户端停止传输数据,但一定时间内又没有正常关闭连接,Socket.IO就会认为它是断开连接了;
  • 当连接丢失时,Socket.IO默认会自动重连;

事件://典型的web通信方式是通过HTTP收发文档的;但实际中都是基于事件传输的;

  • Socket.IO允许像WebSocket那样传输简单文本信息;
  • 此外,还支持通过emit和listen事件进行JSON数据收发;

命名空间://Socket.IO允许在单个连接中利用命名空间来将消息彼此区分;

有些时候程序需要进行逻辑拆分,但考虑到实际的性能问题,不希望依赖同时打开过多连接;而Socket。IO会对同样的资源进行频道分割,并将数据传输给对应的回调函数,一般情况下会使用一个传输通道;

//server
io.sockets.on('connection');
io.of('/some/namespace').on('connection);
io.of('/some/other/namespace').on('connection'); //client
var socket = io.connect();
var socket1 = io.connect('/some/namespace');
var socke2 = io.connect('/some/other/namespace');

构建一个聊天系统:

  • package.json:

    {
    "name": "chat.io",
    "version": "0.0.1",
    "dependencies": {
    "express": "2.5.1",
    "socket.io": "0.9.2"
    }
    }
  • server.js:
    var express = require('express');
    var sio = require('socket.io'); var app = express.createServer(express.bodyParser(), express.static('public')); app.listen(3000); //将socket.io绑定到app上;
    var io = sio.listen(app); //设置连接监听器;
    io.sockets.on('connection', function(socket) {
    socket.on('join', function(name) {
    socket.nickname = name;
    //如果使用socket.emit则只是将消息返回客户端;broadcastt是个消息标志,表示广播给所有用户
    socket.broadcast.emit('announcement', name + ' joined the chat.');
    });
    socket.on('text', function(msg,callback) {
    socket.broadcast.emit('text', socket.nickname, msg);
    callback('title'); //调用'text': socket.emit传来的回调方法;
    });
    });
  • public/index.html
    <div id='chat'>
    <ul id='messages'></ul>
    <form id='form'>
    <input id='input' type='text'/>
    <button>Send</button>
    </form>
    </div> //当Socket.IO绑定到http.server之后,所有以/socket.io开始的url都会被拦截; <script type="text/javascript" src='/socket.io/socket.io.js'></script>
    <script type="text/javascript" src='/chat.js'></script>
  • chat.js
    //Socket.IO自带了其浏览器端运行的代码,直接使用;
    window.onload = function() { //所有Socket.IO客户端代码暴露出来的方法和类都在io命名空间中;
    var socket = io.connect(); socket.on("connect", function() {
    //通过join事件发送昵称;
    socket.emit('join', prompt('What is your nickname?'));
    //显示聊天窗口
    document.getElementById('chat').style.display = 'block'; socket.on('announcement', function(msg) {
    var li = document.createElement('li');
    li.className = 'announcement';
    li.innerHTML = msg;
    document.getElementById('messages').appendChild(li);
    });
    }); function addMessage (from, text) {
    var li = document.createElement('li');
    li.className = 'message';
    li.innerHTML = '<b>' + from + '</b>: ' + text;
    document.getElementById('messages').appendChild(li);
    return li;
    } var input = document.getElementById('input'); document.getElementById('form').onsubmit = function() {
    //这里是在自己的广播提交之后立即将信息打印出来,并没有服务器确认是否接受成功;
    var li = addMessage('me', input.value);
    socket.emit('text', input.value, function(data) {
    //这个回调函数用于确认消息接受成功;
    li.className = 'confirmed';
    li.title = date;
    }); //重置输入框
    input.value = '';
    input.focus();
    return false;
    }
    //用于打印其他用户广播;
    socket.on('text', addMessage);
    }

      

node相关--socket.io的更多相关文章

  1. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  2. (转)使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  3. 转载:node.js socket.io

    本文转自:http://www.xiaocai.name/post/cf1f9_7b6507  学习node.js socket.io 使用 用node.js(socket.io)实现数据实时推送 在 ...

  4. 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

    原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...

  5. node及socket.io实现简易websocket双向通信

    技术栈: vue2.0 + node + websocket( socket.io ) 1. 安装依赖 初始化vue项目后输入下方指令安装依赖包 // 推荐cnpm安装 npm i vue-socke ...

  6. 基于node.js+socket.io+html5实现的斗地主游戏(1)概述

    一.游戏描述 说是斗地主游戏,其实是寝室自创的"捉双A",跟很多地方的捉红10.打红A差不多,大概规则是: 1.基础牌型和斗地主一样,但没有大小王,共52张牌,每人13张,这也是为 ...

  7. node.js+socket.io配置详解

    由于我是在win7的环境下,在这里就以win7系统为例进行讲解了. 首先需要在nodejs官网下载最新版的node.js,下载完毕直接安装即可,安装成功后在cmd命令行中执行node指令,如下结果就说 ...

  8. node与socket.io搭配小例子-转载

    //服务端代码 io = require('socket.io').listen(app), fs = require('fs'), cookie=require('cookie'); request ...

  9. node.js+socket.io安装

    最近做安卓遇到一个网络包的bug,服务端使用node做的,通讯用socket.io,但是服务端没法调试,没办法,还是自己搭建一个服务器端吧,索性买了阿里云的ecs测试,之前也配置过node+socke ...

随机推荐

  1. Matlab之字符串处理

    Matlab处理字符串 1.取得部分字符串 我们有一个字符串 file='20131030_113109.TemporaryAlias.Poly5'; 简单操作举例: >> a=file( ...

  2. DELPHI设置枚举类型size

    delphi枚举类型长度默认为2个字节(单字),而在C中枚举为4个字节(双字),如果需要跨这两个平台编程,传输结构时会由于数据长度不一造成灾难. 经过查找资料,原来delphi可以通过{$Z+} {$ ...

  3. ZJOI Day 2 游记

    ---恢复内容开始--- 去ZJOI Day 2打了一会酱油...各种神犇大爷都来屠,南外的小朋友也来屠我们了真是感动...没有看到毛爷爷真是可惜.. Day[-1] 早上还在上课,吃完中饭立马跑去找 ...

  4. Install ssdb-rocks on CentOS 6

    Install ssdb-rocks on CentOS 6 C.C.  发表于 2014年08月10日 20:14 | Hits: 649 为了优化节操精选的弹幕系统,打算更换到Facebook的R ...

  5. 什么是iis服务器

    IS 是Internet Information Server的缩写,它是微软公司主推的服务器,最新的版本是Windows2003里面包含的IIS 6.0,IIS与WindowNT Server完全集 ...

  6. soem函数库的编译

    D:/并条机/soem/soem-master/doc/html/files.htm https://github.com/smits/soem https://github.com/OpenEthe ...

  7. 26.打印所有和为S的连续正整数序列[FindContinuousSequencesWithSumS]

    [题目] 输入一个正数n,输出所有和为n连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. [分析] 这是网易的一道面试题.这道 ...

  8. 【读书笔记】读《JavaScript DOM 编程艺术-第2版》

    1.DHTML DHTML曾被认为是HTML/XHTML.CSS和JavaScript相结合的产物,就像今天的HTML5那样,但把这些东西真正凝聚在一起的是DOM.如果真的需要来描述这一过程的话,“D ...

  9. 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

    转自 http://www.jb51.net/article/37527.htm,感谢作者 #include "stdafx.h"      #include <iostre ...

  10. android 实现自定义卫星菜单

    看了hyman老师的视频,听起来有点迷糊,所以就想把实现卫星菜单的实现总结一下.长话短说,下面总结一下: 一.自定义ViewGroup1).自定义属性文件 属性的定义: <attr name=& ...