上节回顾
异步, 不是要请求服务器返回网页, 而是本地的网页打开, 就可以启动, 与后台交互.
这样本地与服务器, 存在一个跨域问题, ajax用一个叫jsonp的东西实现跨域
新内容(长连接-socket实时聊天技术)
网络模型
tcp/ip参考模型 | osi参考模型(理想化) |
---|---|
应用层 | 应用层 |
表示层 | |
会话层 | |
传输层 | 传输层 |
网络层 | 网络层 |
网络接口层 | 数据链路层 |
物理层 |
即时通讯的实现(轮询->websocket [h5出现后带来的新技术])
- 轮询:
过去很多网站为了实现即时通讯,所用的技术都是轮询(polling)。
轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。
这种传统的HTTP request 的模式带来很明显的缺点 –
浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。
- WebSocket
使用 WebSocket,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
在此WebSocket 协议中,为我们实现即时服务带来了两大好处:
- Header --
互相沟通的Header是很小的-大概只有 2 Bytes - Server Push --
服务器的推送,服务器不再被动的接收到浏览器的request之后才返回数据,而是在有新数据时就主动推送给浏览器。
终端&web页面聊天室
- 终端交互聊天室(net & readline)
net 模块用来实现 socket 功能, readline 用来读取 client 的输入
server 端先创建socket监听 ->
client 端没开启一个(当做一个用户)将其地址信息保存 ->
当某个 client 发送信息时, server 端接收信息, 并且对其进行处理 ->
最后通过 server 将其信息广播出去.
- web页面交互(socket.io)
思路与终端聊天室相似, 只是使用模块区别
用户请求服务器, 开启聊天页面, 当然, 服务器需要验证用户身份 ->
用户通过登录审核后, 即完成了一次握手, 接下来便可进行即时通讯 ->
同样要求服务器端进行 socket 监听和信息广播.
作业
nodejs写基于终端和页面的聊天室