标签:style blog http color strong os
说到学习Socket.IO,就不得不先说说WebSocket。
WebSocket可以说是一种协议,它建立在无状态的HTTP协议基础之上。从字面的意思来理解,就是将TCP的Socket(套接字)应用在了HTTP中,从而使通信双方建立起一个保持在活动状态连接通道,并且是一个全双工(两个设备之间同时进行双向通信)。
与Ajax不同,它并非面向请求和响应,而是可以直接通过send方法进行消息传递。WebSocket可以说是Socket.IO的一个子集,Socket.IO的底层实现其实有5种方式,WebSocket只是其中一种。在默认的情况下,我们建立的socket.io连接,底层也是调用websocket的实例。当我们io.connect()建立一个socket连接的时候,返回的是namespace实例,namespace实例中又有个socket实例,当新建一个连接,或者发送一条消息的时候,namespace->socket->transport->websocket(xhrpolling...),其实发送一条消息真正的发送者还是底层的websocket或是xhrpolling或其他的几种,而socket.io只是一个组织者,当我们需要建立连接的时候,它自己会在其内部挑选一种连接方式,然后实现连接。
WebSocket的工作方法:
Socket.IO和WebSocket的比较:
Socket.IO的工作方法:socket.io最主要的是emit和on两个函数
var app = require(‘express‘)(); var server = require(‘http‘).Server(app); var io = require(‘socket.io‘)(server); server.listen(80);
设置监听器
io.on(‘connection‘, function (socket) { socket.emit(‘news‘, { hello: ‘world‘ }); socket.on(‘my other event‘, function (data) { console.log(data); }); });
<script src="/socket.io/socket.io.js"></script> <script> 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‘ }); }); </script>
常用API:
向所有客户端发送消息:io.emit
// the following two will emit to all the sockets connected to `/` io.sockets.emit(‘hi‘, ‘everyone‘); // v0.9的,v1.0还支持 io.emit(‘hi‘, ‘everyone‘); // 简短形式,推荐用这个
进入一个房间,向房间发送消息(自己也能收到),离开房间:socket.join, io.to, socket.leave
io.on(‘connection‘, function(socket){ socket.join(‘some room‘); io.to(‘some room‘).emit(‘some event‘): // in和to实现相同效果,io.in().emit();
socket.leave(‘some room‘); });
向一个房间广播消息(自己收不到消息):socket.broadcast.to(‘some room‘).emit(‘message‘); room换成id
io.on(‘connection‘, function(socket){ socket.on(‘say to someone‘, function(id, msg){ socket.broadcast.to(id).emit(‘my message‘, msg); // id为socket#id }); });
当成WebSocket来用:(客户端)socket.send(‘hi‘)
,(服务器)用socket.on(‘message‘, function(data){})
来接收。
http://raytaylorlin.com/Tech/web/Nodejs/socket-io-tutorial/
http://blog.csdn.net/jiangcs520/article/details/17287531
标签:style blog http color strong os
原文地址:http://www.cnblogs.com/sysuxw/p/socket-io.html