lua 怎么实现路径的socket
socket是面向连接的只传数据,socket和HTTP可以说是两回事,但又是一家人~
我发现现在很多人socket和http混起来了。其实他们不在一个层面上。
首先,socket是一种实现而HTTP是一种协议。
socket最早是由BSD socket也就是*nix系统实现了TCP/UDP协议,是一种实现。而HTTP是应用层协议,它底层通过socket建立连接,所以你如果看UNIX系统编程,那就会发现系统提供了SOCKET调用,却不提供HTTP。
如果上面这些概念你看不明白,那么很简单。你可以和一个HTTP服务器建立一个socket连接,然后发送下面一数据:(记得我每个回车就是一个\r\n)
POST /path HTTP/1.0
Host: www.aweb.com
Connection: Close
Content-Length: 5
data
这样是不是很熟悉,就是一个HTTP标准的请求报文,发送后你就会发现HTTP服务器会返回一长串HTTP格式的数据,也就是响应报文。这就是一个HTTP的请求响应流程。
最后,我猜测很多人把socket和HTTP混乱的原因,可能是因为概念上的混淆。socket是面向连接的,是一种长连接,如TCP就经过三次握手,就开始传送数据,如果不是一方主动断开,那么连接一直建立着,直到掉线。而HTTP却不是,HTTP是建立连接后,接收完一个报文后,服务器基本上是选择了主动断开连接,这在tomcat之类的服务器除非特殊设置,否则都是这样的。即使connection发送的是keep-alive。
然而,我还是想再说一次,他们真的不是一回事。也许大家都知道HTTP协议是基于TCP协议实现的,却不知道socket实现了TCP,这可能是这笔糊涂账的根源吧,也许是学校应试教育给学生带来的后遗症。他教会我们网络有OSI七层协议,HTTP在应用层,TCP/IP在传输层,却不告诉我们为什么是这样,以及这样的目的是什么?我记得读书的时候,为了考试,花了许多功夫背啊,物理层,数据链路层,网络层,传输层……OK,考试过了,但是又能怎么样呢?
说了这么多,就是觉得学习的时候,要多问问自己这是为什么。