参考:
http://www.cnblogs.com/dolphinX/p/3460545.html
http://www.cnblogs.com/wei2yi/archive/2011/03/23/1992830.html
http://www.2cto.com/net/201211/166537.html
概念:
TCP协议与HTTP协议区别(常规情况):
HTTP协议是短链接,单向通信,属于OSI参考模型里的应用层协议
TCP协议是长链接,双工通信,属于OSI参考模型里的传输层协议
---------------------------------------------------------------------------------------------------------
socket:
两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。socket是对TCP/IP协议的封装,它是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。通过Socket,我们才能使用TCP/IP协议,简而言之,socket是调用TCP/IP协议的API。
---------------------------------------------------------------------------------------------------------
WebSocket API是下一代客户端-服务器的异步通信方法,是W3C推动的一个客户端标准,隶属于HTML5的范畴。
用法如下:
WebSocket API是只专注于客户端的API,因为每个服务器端语言有自己的API。下面的代码片段是打开一个连接,为连接创建事件监听器,断开连接,消息时间,发送消息返回到服务器,关闭连接。
---------------------------------------------------------------------------------------------------------
Socket.IO:
由于有的低版本浏览器不支持WebSocket,所以出现了一个Socket.IO技术,他是对WebSocket的封装,不仅实现了ws协议,也支持长轮询等方式,兼容flash,IE6等不支持ws协议的浏览器。
简单例子:
服务端:
var app = require(‘http‘).createServer(handler), //创建一个HTTP服务器 io = require(‘socket.io‘).listen(app),//把服务器实例传递给Socket.IO fs = require(‘fs‘),url = require("url"); app.listen(8080);//绑定8080端口 function handler (req, res) { var route = url.parse(req.url).pathname; if (route == ‘/home‘||route == ‘/‘) { fs.readFile(__dirname + ‘/home.html‘,function (err, data) { if (err) { res.writeHead(500); return res.end(‘Error loading home.html‘); } res.writeHead(200, {‘Content-Type‘: ‘text/html‘}); res.end(data); }); } else if (route == ‘/home2‘) { fs.readFile(__dirname + ‘/home2.html‘,function (err, data) { if (err) { res.writeHead(500); return res.end(‘Error loading home2.html‘); } res.writeHead(200, {‘Content-Type‘: ‘text/html‘}); res.end(data); }); } } io.sockets.on(‘connection‘, function (socket) { //监听socket连接,执行回调 socket.emit(‘news‘,{‘name‘:‘zzn‘});//发射一个news事件 socket.on(‘my other event‘, function (data) {//监听my other event这个事件 console.log(data); }); });
客户端home.html:
<script src="//cdn.bootcss.com/socket.io/1.3.7/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect(‘http://localhost:8080/‘);//建立socket连接 socket.on(‘news‘, function (data) {//监听news事件 console.info(data) socket.emit(‘my other event‘, { my: ‘data‘ });//发射my other event这个事件 }); </script>
---------------------------------------------------------------------------------------------------------
socket.io API
http://www.cnblogs.com/xiezhengcai/p/3956401.html
原文:http://www.cnblogs.com/leyi/p/5094860.html