hello,今天我们来玩一下WebSocket
,一个神奇的协议,我们现在的需求是这样,我需要实现一个聊天,理所当然需要搭建一个服务器,这个环境用Node
来搭建,前端可以采用ajax来提交需要发送的数据,似乎没毛病哈,但client A 发送的数据,client B怎么及时接收呢?轮询是吧,可以。但有个更优雅的解决方案。
http
对于每个开发人员来说都再熟悉不过,客户端发起请求,服务器响应,似乎很合理。WebSocket
就是来打破这种合理的,服务器也可以主动的,这样一个优雅的方案就诞生了。服务器主动向客户端发消息,把clilent A的数据,主动给client B、C、D等等。
1、搭建node环境
a.如node环境没装的请自行安装
b.在本地建一个文件夹,如20171210
c/1.你可以npm init
,在npm install espress --save
和 npm install --save socket.io
c/2.新建一个package.json,导入如下代码,再npm install
notice:
一定要在20171210
目录下打开终端输入
{ “name”: “chat”, “version”: “0.0.1”, “description”: “my chat”, “dependencies”: { “express”: “^4.15.2”, “socket.io”: “^2.0.4” } }
2、创建node
脚本
新建server.js
文件,内容如下,之后使用node server.js
运行脚本var app = require(‘express’)(); var http = require(‘http’).Server(app); var io = require(‘socket.io’)(http); app.get(‘/‘, function(req, res){ //__dirname 是node的全局变量global的属性(类似浏览器的window),表当前模块的文件夹名称 res.sendFile(__dirname + ‘/index.html’);//默认打开index.html文件,暂并没有创建该文件,所以打开localhost:3001会报错 }); //建立连接 io.on(‘connection’, function(socket){ //监听客户端的message事件 socket.on(‘message’, function(msg){ //把client A发来的数据,给更多的client,客户端要监听这个reversion 才可拿到服务器发来的消息 io.emit(‘reversion’, msg); }); }); //websocket 也是建立再http基础上的,并监听3001端口 http.listen(3001, function(){ console.log(‘监听成功’); });
3、客户端(浏览器)需要做的操作
此处只展示script里的部分,切为演示效果把需要发送的内容写死,前端效果请自行编写,可在当前目录都建几个html,相当于每一个html就是一个用户,每一个用户都会送到消息,当然也可以发送不同的消息//引入socket脚本
4、效果
具体效果,有时间会在此处展示出来,不早了,收拾收拾回家,明周一正常工作日,加油
项目地址https://github.com/xinshani/websocket--demo