Socket 和 Websocket@ 洪涛 2015 年 3 月 10 日
TCP/IP 互联网协议簇
Tcp 传输控制协议在因特网协议族( Internet protocol suite )中, TCP 层是位于 IP 层之上,应用层之下的中间层。
Ip 网际协议根据源主机和目的主机的地址传送数据;IP 定义了寻址方法和数据报的封装结构。这个协议家族的两个核心协议,包括 TCP (
传输控制协议)和 IP (网际协议)。
TCP
创建通路三次握手,初始化参数,比如序号。
数据传输为保证可靠性和强壮性:使用序号,对收到的TCP报文段进行排序以及检测重复的数据;使用校验和来检测报文段的错误;使用确认和计时器来检测和纠正丢包或延时。
位 IP 层之上,于应用层( http 协议应用层协议的一中)之下。
将应用层的数据分组并加序号和确认号。
Socket or Websocket
Socket And Socket API
Socket pair标识网络中的主机和进程127.0.0.1:80
Socket API在 TCP/IP 协议实现应用中, Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口。C, PHP, Java 等都有对应的实现。
Socket API list
Function Description
socket 创建一个新的确定类型的套接字,类型用一个整型数值标识(文件描述符),并为它分配系统资源
bind 一般用于服务器端,将一个套接字与一个套接字地址结构相关联,比如,一个指定的本地端口和 IP 地址。
listen 用于服务器端,使一个绑定的 TCP 套接字进入监听状态。connect 用于客户端,为一个套接字分配一个自由的本地端口号。 如果
是 TCP 套接字的话,它会试图获得一个新的 TCP 连接。accept 用于服务器端。 它接受一个从远端客户端发出的创建一个新的
TCP 连接的接入请求,创建一个新的套接字,与该连接相应的套接字地址相关联。
send 和 recv 用于往 / 从远程套接字发送和接受数据。close 用于系统释放分配给一个套接字的资源。 如果是 TCP ,连接
会被中断。
Socket API list (1)
Function Description
select 用于修整有如下情况的套接字列表: 准备读,准备写或者是有错误。
gethostbyname和gethostbyaddr
用于解析主机名和地址。
poll 用于检查套接字的状态。 套接字可以被测试,看是否可以写入、读取或是有错误。
getsockopt 用于服务器端,使一个绑定的 TCP 套接字进入监听状态。setsockopt 用于为指定的套接字设定一个特定的套接字选项。close 用于系统释放分配给一个套接字的资源。 如果是 TCP ,连接
会被中断。
Socket API list (2)
Example nodeserver.js
var net = require('net');
var server = net.createServer(function(c) { //'connection' listener console.log('client connected'); c.on('end', function() { console.log('client disconnected'); }); c.write('hello\r\n'); c.pipe(c);});server.listen(8124, function() { //'listening' listener console.log('server bound');});
Example nodeclient.js
var net = require('net');var client = net.connect({port: 8124}, function() { //'connect' listener console.log('connected to server!'); client.write('world!\r\n'); });client.on('data', function(data) { console.log(data.toString()); client.end();});client.on('end', function() { console.log('disconnected from server');});
En,HowAbout
Websocket
Why websocket?
互联网需要 Web 实时应用在线游戏、在线证券、设备监控、新闻在线播报、 RSS 订阅推送等等websocket 之前 , 有轮询( Polling )和 Comet 方案
Polling 和 Comet 增加了编程实现的复杂度增加了服务器端的负载
So, Html5 websocket come!!!!
What is websocket
Websocket 规范通过一个 http 请求发起,附加头信息Upgrade: WebSocket”, 升级 http 协议,建立 websocket 链接
WebSocket 服务器端实现Kaazing WebSocket Gateway — 一个 Java 实现的 WebSocket Servermod_pywebsocket — 一个 Python 实现的 WebSocket ServerNetty — 一个 Java 实现的网络框架其中包括了对 WebSocket 的支持node.js — 一个 Server 端的 JavaScript 框架提供了对 WebSocket 的支持
WebSocket 客户端实现HTML5 WebSocket
Websocket 浏览器支持
浏览器支持 支持情况Chrome Supported in version 4+
Firefox Supported in version 4+
Internet Explorer Supported in version 10+
Opera Supported in version 10+
Safari Supported in version 5+
Example nodewsapp.js
// npm install websocket
var WebSocketServer = require('websocket').server;
new WebSocketServer({ httpServer: server});
Example nodeclient.html
var wsServer = 'ws://localhost:8124';var websocket = new WebSocket(wsServer);
websocket.onmessage = function (evt) { onMessage(evt) };websocket.onerror = function (evt) { onError(evt) };
function onMessage(evt) { console.log('Retrieved data from server: ' + evt.data);}function onError(evt) { console.log('Error occured: ' + evt.data);}
Reference
http://zh.wikipedia.org/wiki/TCP/IP协议族
http://zh.wikipedia.org/wiki/传输控制协议
http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/