Socket总结 & node搭建简单的http服务器

网络中的进程

socket解决的是网络中进程间的通信,其首要解决的就是如何在网络中找到目标进程,这就要求进程拥有唯一性的索引,方便查找连接。

一台机器上,进程与进程之间通行,以PID作为唯一标识。但是在网络中,不同的机器,PID可能重复。

然而,网络层的IP 可以唯一标识主机,传输层的 tcp协议和端口号 则能够唯一标识主机中的进程。

因此: ip地址+协议+端口 = 网络中的一个进程

socket

就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆socket”。

socket位于应用层和传输层之间的一个抽象层,封装传输层的各种复杂操作,提供几个简单的接口供应用层调用。

socket的主要作用是实现在网络中 进程之间的通信

服务端和客户端 统一使用 socket提供的api进行通信。

socket通信api

socket三次握手 (TCP)

socket三次握手

client客户端调用 connect() 方法时,即开始进行建立tcp连接(三次握手)中的 第一次握手(阻塞等待服务端的第二次握手)。

server服务端开始调用 accept() 方法,完成 第二次握手(阻塞等待客户端的第三次握手)。

client客户端 connect() 方法收到第二次握手,进行 第三次握手connect() 方法完成执行。

server服务端 accept() 方法收到第三次握手,完成执行。

通信

socket使用的 “ 打开 -> 读写 -> 关闭 ” 这种模式进行的操作。

这种模式将socket看成一个特殊的 “文件”,提供一些函数对其进行 “IO操作”。

服务端和客户端通过读取这个中间 “文件” 来进行通信。

具体的I/O操作函数有一下几种方式

  • read()/write()

  • recv()/send()

  • readv()/writev()

  • recvmsg()/sendmsg()

  • recvfrom()/sendto()

node中的socket编程

node中跟socket相关的网络模块有两个:

  • net

  • http

net为最底层,以事件驱动机制将socket的接口进行封装,提供socket的相关操作。

http在net的基础上,基于http协议进行再一次封装,将请求分成http头和http体,提供基于request和response的基本操作。

net模块

net模块是node的原生模块,是对tcp层的封装(socket)。

提供了两个类的定义:

  • net.Socket (实现node中的socket操作)

    • 事件: ‘lookup’
    • 事件: ‘connect’
    • 事件: ‘data’
    • 事件: ‘end’
    • 事件: ‘timeout’
    • 事件: ‘drain’
    • 事件: ‘error’
    • 事件: ‘close’
  • net.Server (基于socket,再次封装成服务端API)

    • 事件: ‘listening’
    • 事件: ‘connection’
    • 事件: ‘close’
    • 事件: ‘error’

提供了一些基于两个类的基本操作

  • net.createServer([options], [connectionListener])

  • net.connect(options, [connectionListener])

  • net.createConnection(options, [connectionListener])

  • net.connect(port, [host], [connectListener])

  • net.createConnection(port, [host], [connectListener])

  • net.connect(path, [connectListener])

  • net.createConnection(path, [connectListener])


服务端使用

var net = require('net');

var server = net.createServer(function(clientSocket){
   
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值