英文官网:
Socket.Io (导航栏的getStart或者demo学习)
中文文档(W3C):
Socket.Io中文文档 (更推荐吧,当然也不是特别好)
它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用
WebSocket它是一个完整的 应用层协议,包含一套标准的 API 。,基于Tcp,Socket.Io是其上层的封装更加易用。从第一点也说明包含WebSocket
WebSocket API 是 HTML5 标准的一部分, 但这并不代表 WebSocket 一定要用在 HTML 中,或者只能在基于浏览器的应用程序中使用。实际上,许多语言、框架和服务器都提供了 WebSocket 支持
通讯技术IM一般都是基于P2P模式(这句话可能不是特别严谨,理解意思就好),所以应该吧客户端js和WebSocket分开理解,js只是间接的调用WebSocket的一个接口层次。你至少应该把WebSocket理解为一个进程。
当一个主机开启WebSocket进程服务,那么要连接另外的一个主机开启WebSocket进程服务,建立连接自然就可以通信了。通信自然就要有接口去 =》 发送 和 接受 ,由于一直是等待监听所以编写起来和DOM时间监听非常像。发送用emit,接受用on。拿自然也涉及到自定义事件
一对一的建立连接只能两个人通信,如何进行多人通信呢。只需要再加一台服务器,帮助传达消息即可。(就好比,你传纸条都传给一个人(暂时叫代理人),由于纸条带有接受者名字,代理人会自动的传达给接受者(并且中间还可以做一些列的事情,比如存储)。
比如现在有两个服务器,怎么聊天呢,你说一句,我听一句,就像DOM事件监听一样,
// 某一个服务
const eventType = 'chat'
const eventContent = 'Hi, are you ok!'
socket.emit(eventType, eventContent)
//它向另一个服务器说了一句“话”,话的类型是chat,内容是'Hi, are you ok!'
//另外一个服务
const eventType = 'chat'
socket.on(eventType, function(eventContent){
console.log(eventContent) //如果已经建立连接,监听别的服务发送的消息
})
elemnet.addEventListener('eventType', eventFunction)
它们是通过指定元素暴露的接口addEventListener连接,那socket服务也是如此
//先指定一位服务,做主服务,它暴露和他通信的接口 (类似的"addEventListener")
const express = require('express')()
const server require('http').createServer(express) //创建的服务器
const socketIo = require('socket.io') //引入socket.io文件
const io = socketIo(server)//挂载socket.io到后端服务上,实现socket.io的接口挂载开启
//另一位服务自然是连接上即可 ES6
import io from 'socket.io-client'
const socket = io(url) //根据url连接服务 注意,url就是上一个服务器的部署地址,url有默认值