0%

使用WebSocket搭建聊天服务器

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 --savenpm 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