0821_长连接(socket)实现即时通讯

上节回顾

异步, 不是要请求服务器返回网页, 而是本地的网页打开, 就可以启动, 与后台交互.

这样本地与服务器, 存在一个跨域问题, ajax用一个叫jsonp的东西实现跨域

新内容(长连接-socket实时聊天技术)

网络模型

tcp/ip参考模型 osi参考模型(理想化)
应用层 应用层
表示层
会话层
传输层 传输层
网络层 网络层
网络接口层 数据链路层
物理层

即时通讯的实现(轮询->websocket [h5出现后带来的新技术])

  • 轮询:

过去很多网站为了实现即时通讯,所用的技术都是轮询(polling)。
轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。
这种传统的HTTP request 的模式带来很明显的缺点 –
浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。

0821_长连接(socket)实现即时通讯_第1张图片
传统的http轮询
  • WebSocket

使用 WebSocket,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
在此WebSocket 协议中,为我们实现即时服务带来了两大好处:

  1. Header --
    互相沟通的Header是很小的-大概只有 2 Bytes
  2. Server Push --
    服务器的推送,服务器不再被动的接收到浏览器的request之后才返回数据,而是在有新数据时就主动推送给浏览器。
0821_长连接(socket)实现即时通讯_第2张图片
web socket

终端&web页面聊天室

  • 终端交互聊天室(net & readline)

net 模块用来实现 socket 功能, readline 用来读取 client 的输入

server 端先创建socket监听 ->
client 端没开启一个(当做一个用户)将其地址信息保存 ->
当某个 client 发送信息时, server 端接收信息, 并且对其进行处理 ->
最后通过 server 将其信息广播出去.

  • web页面交互(socket.io)

思路与终端聊天室相似, 只是使用模块区别

用户请求服务器, 开启聊天页面, 当然, 服务器需要验证用户身份 ->
用户通过登录审核后, 即完成了一次握手, 接下来便可进行即时通讯 ->
同样要求服务器端进行 socket 监听和信息广播.

作业

nodejs写基于终端和页面的聊天室

你可能感兴趣的:(0821_长连接(socket)实现即时通讯)