Socket.io系列三 文档之概括
来源:互联网 发布:淘宝网棉服女 编辑:程序博客网 时间:2024/05/22 06:40
如何使用
安装:
npm install socket.io
服务端(app.js):
var app = require('http').createServer(handler);var io = require('socket.io')(app);var fs = require('fs');function handler(req,res){fs.readFile(__dirname+'/index.html',function(err,data){if(err){res.writeHead(500);return res.end('Error loading index.html')}res.writeHead(200);res.end(data);});}app.listen(80);io.on('connection',function(socket){socket.emit('news',{hello:'world'});socket.on('my other event',function(data){console.log(data);})});
客户端(index.html):
<script src="/socket.io/socket.io.js"></script><script>var socket = io('http://localhost');socket.on('news',function(data){ console.log(data); socket.emit('my other event',{my:'data'});});</script>
使用express框架3/4:
服务端(app.js):
var app = require('express')();var server = require('http').Server(app);var io = require('socket.io')(server);server.listen(80);app.get('/',function(req,res){res.sendfile(__dirname+'/index.html');});io.on('connection',function(socket){socket.emit('news',{hello:'world'});socket.on('my other event',function(data){console.log(data);})});
客户端(index.html):
<span style="font-size:18px;"><script src="/socket.io/socket.io.js"></script><script>var socket = io('http://localhost');socket.on('news',function(data){ console.log(data); socket.emit('my other event',{my:'data'});});</script></span>
使用express框架:(暂时不知道与上个真正意义的区别,并且此次测试服务端无法运行)
服务端(app.js):
var app = require('express').createServer();var io = require('socket.io')(app);app.listen(80);app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html');});io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); });});
客户端(index.html):
<span style="font-size: 18px;"><script src="/socket.io/socket.io.js"></script><script>var socket = io('http://localhost');socket.on('news',function(data){ console.log(data); socket.emit('my other event',{my:'data'});});</script></span>
发送和接收事件
socket.io允许你自定义发送和接收事件的名称,除了‘connect’,'message','disconnect':
//io.listen会创建一个http 服务器var io = require('socket.io')(80);io.on('connection',function(socket){io.emit('this',{will:'be received by everyone'});socket.on('private message',function(from,msg){console.log('I received a private message by',from,'saying',msg);socket.on('disconnect',function(){io.sockets.emit('user disconnected');});});})
用命名空间来限制
如果在一个应用上你想控制所有的信息和事件,默认或者是命名空间都可以。如果你想借助第三方代码、分享代码给他人,socket.io提供了命名空间。
服务端(app.js):
//io.listen会创建一个http 服务器var io = require('socket.io')(80);var chat = io.of('chat').on('connection',function(socket){socket.emit('a message',{that:'only','/chat':'will get'});chat.emit('a message',{everyone:'in','chat':'will get'})})var news = io.of('/news').on('connection',function(socket){socket.emit('item',{news:'item'});});
客服端(index.html):
<script>var chat = io.connect('http://localhost/chat'), news = io.connect('http://localhost/news');chat.on('connect',function(){ chat.emit('hi');})news.on('news',function(){ news.emit('woot');});</script>
发送易变的信息
有时一些确定的信息被发送,我们称你有一个实时显示基于关键词bieber的应用。
如果客户端没有准备去接收信息(因为网络延迟或者其他问题,或者他通过长连接已经连接了并且在一个轮询中),如果他没有接收到所有发出的信息,你应用时糟糕。
这种情况下,你应以把信息作为变动的信息发送出去。
服务端:
var io = require('socket.io').listen(80);io.sockets.on('connection', function (socket) { var tweets = setInterval(function () { getBieberTweet(function (tweet) { socket.volatile.emit('bieber tweet', tweet); }); }, 100); socket.on('disconnect', function () { clearInterval(tweets); });});
注意:这个地方官网上省略了 getBieberTweet()函数的声明。
根据参考http://runnable.com/UTlPMF-f2W1TAAAo/sending-volatile-messages-for-socket-io,getBieberTweet()函数如下:
function getBieberTweet(cb) { cb('check out iambieber.com');}
发送和接收数据
有时,当客户端确认信息的接收时候能得到一个返回值。
为了做到这个,仅仅需要为send或者emit方法传递一个方法作为最后一个参数。当你使用emit时候,你同时传递数据:
服务端:
var io = require('socket.io').listen(80);io.sockets.on('connection', function (socket) { socket.on('ferret', function (name, fn) { fn('woot'); });});
客户端:
var socket = io(); // TIP: io() with no args does auto-discovery socket.on('connect', function () { // TIP: you can avoid listening on `connect` and listen on events directly too! socket.emit('ferret', 'tobi', function (data) { console.log(data); // data will be 'woot' }); });
说明:输出的结果为:‘woot’, 服务端的代码中的name为‘tobi’。
广播消息
仅仅在emit和send方法前增加broadcast的标志。广播意味着消息将会发给任何人除了消息的发起者:
服务端:
var io = require('socket.io').listen(80);io.sockets.on('connection', function (socket) { socket.broadcast.emit('user connected');});
当做一个跨浏览器的websocket
如果你仅仅是需要实现websocket的基本功能即简单的发送消息,你可以这样做:
服务端:
var io = require('socket.io').listen(80);io.sockets.on('connection', function (socket) { socket.on('message', function () { }); socket.on('disconnect', function () { });});
客户端:
var socket = io('http://localhost/'); socket.on('connect', function () { socket.send('hi'); socket.on('message', function (msg) { // my msg }); });
0 0
- Socket.io系列三 文档之概括
- Java之------socket系列(三)
- socket.io 中文文档
- IO流系列(三)
- nodeJS 之 socket.io
- socket之重叠io
- socket.io 中文手册 socket.io 中文文档
- Socket IO 三种方式
- IO流简要概括
- MOSS系列之三列表和文档库[转帖]
- Solr入门之官方文档6.0阅读笔记系列(三)
- Socket.IO 中文文档 概述部分
- java之J.U.C系列文章--概括与基础
- Struts2之我见系列总结----概括(2012.11.23)
- socket系列之什么是socket
- GameBoy系列(三):用户IO
- IO系列之File
- socket.io系列二 聊天应用
- 黄河旋风你敢去吗?《材料的、找工作的》必看,求置顶啊
- jquery键盘事件
- 去除字符串所有空格
- Java数组初始化
- 编译原理利用Flex+Bison实现简单计算器
- Socket.io系列三 文档之概括
- windowsXP下安装Qt4.8
- 苹果发布全新 iOS 及 OS X 系统,同时推出全新编程语言 Swift
- 【LeetCode】3Sum
- 再回香山
- Fedora20 编译有curses.h的头文件的代码时说找不到
- 云计算的三种服务模式
- char ** a; const char ** b; char * const * c; const char * const * d; const char * const * const e;对
- QlikView实现部分加载数据的功能(Partial Load)