node相关--socket.io
使用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的更多相关文章
- 使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
- (转)使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
- 转载:node.js socket.io
本文转自:http://www.xiaocai.name/post/cf1f9_7b6507 学习node.js socket.io 使用 用node.js(socket.io)实现数据实时推送 在 ...
- 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】
原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...
- node及socket.io实现简易websocket双向通信
技术栈: vue2.0 + node + websocket( socket.io ) 1. 安装依赖 初始化vue项目后输入下方指令安装依赖包 // 推荐cnpm安装 npm i vue-socke ...
- 基于node.js+socket.io+html5实现的斗地主游戏(1)概述
一.游戏描述 说是斗地主游戏,其实是寝室自创的"捉双A",跟很多地方的捉红10.打红A差不多,大概规则是: 1.基础牌型和斗地主一样,但没有大小王,共52张牌,每人13张,这也是为 ...
- node.js+socket.io配置详解
由于我是在win7的环境下,在这里就以win7系统为例进行讲解了. 首先需要在nodejs官网下载最新版的node.js,下载完毕直接安装即可,安装成功后在cmd命令行中执行node指令,如下结果就说 ...
- node与socket.io搭配小例子-转载
//服务端代码 io = require('socket.io').listen(app), fs = require('fs'), cookie=require('cookie'); request ...
- node.js+socket.io安装
最近做安卓遇到一个网络包的bug,服务端使用node做的,通讯用socket.io,但是服务端没法调试,没办法,还是自己搭建一个服务器端吧,索性买了阿里云的ecs测试,之前也配置过node+socke ...
随机推荐
- ExtJS学习之路第八步:Window组件
一个专门Panel用作程序窗口.默认的,Window可以是浮动的(floated).可缩放(resizable)以及可拖动的(draggable).Window能够被最大化适应可视窗口,(restor ...
- jQuery类库的设计
目前为止,jquery是js社区中最活跃.用户最多的前端类库,具有链式操作.兼容性.基于数组的操作.强大的插件机制等特点,也是很多前端入门同学最早接触到的库.但是内部如何实现的,一直吸引着我.因此最近 ...
- glutBitmapCharacter及glBitmap在ATI显卡下无法正常显示的原因初探
最近家里台式机的老显卡烧了,所以更换了ATI的HD6450显卡,却发现glutBitmapCharacter及glBitmap都无法正常显示字符,nviDIA和intel的显卡则一切正常. 发邮件咨询 ...
- POJ 1260 Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6670 Accepted: 3248 Description In ...
- FrameSize、WinSize、VisibleSize、VisibleOrigin区别
FrameSize 手机屏幕分辨率,通过CCEGLView::sharedOpenGLView()->getFrameSize()获得,不同的分辨率手机这个值不同 WinSize 设计分辨率,固 ...
- OpenSwitch操作系统成为Linux基金会官方项目
导读 非盈利机构Linux基金会为推进Linux和开源软件在企业和专业人士的发展,于今天宣布OpenSwitch项目成为Linux基金会官方项目之一. Linux基金会的常务董事Jim Zemlin表 ...
- Unity3d使用蓝牙(bluetooth)开发IOS点对点网络游戏
著作权声明:本文由http://www.cnblogs.com/icker 原创,欢迎转载分享.转载时请保留该声明和作者博客链接,谢谢! 最近使用Unity3d制作的IOS游戏需要加入联网对战功能功能 ...
- [转]Ubuntu 系统 Update-rc.d 命令
本文转自:http://wangyan.org/blog/ubuntu-update-rc-d.html 以防止原博客挂掉,特此做了备份. Ubuntu或者Debian系统中update-rc.d命令 ...
- iOS 转载一篇利用dispatch_once创建单例的文章
感谢文章原作者,http://bj007.blog.51cto.com/1701577/649413
- Java面向对象的继承
继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...