使用node . js实现微信小程序实时聊天功能

  

在微信这个聊天工具里的小程序上实现聊天功能,总感觉怪怪的。但领导要求了,总是要干的。

  

然后就实时通讯这个关键词展开搜索,穿梭于网页之间。不过粘贴复制的真的太多了,找了半天也没找到想要的,不过还是提取到了关键词的WebSocket和node . js的,然后搜索这两是啥,什么关系,总算明白了一点。

  

最后确定了第一步需要干的是用node . js搭建服务(我是装在自己的windows下的):

  

1。首先到官网下载node . js,下载链接

  

,,安装很简单、双击下载好的文件,直接下一步一步,没什么特殊的选择,路径默认就好

  

,,可以打开命令行窗口输入节点- v会输出版本,来检验是否安装成功,其实这个也没什么必要

  

使用node . js实现微信小程序实时聊天功能

  

2。然后新建一个文件夹(我的node . js是安装在Ç盘的,然后再d盘下新建了个叫webSocket的文件夹)

  

,,然后用命令转到该目录下:在这个文件下安装我们要使用的模块:安装模块前需要先生成一个配置文件,不然会报错(反正我报了)

  

使用node . js实现微信小程序实时聊天功能

  

,,生成配置文件命令:<代码> npm init - f

  

,,,执行后可以看到在该文件下多了一个叫package.json的配置文件,先不用管(后面也没管过),接下来继续安装模块的操作

  

,,刚开始我是安装的socket . io,后来发现小程序根本用不了,所以这里也不说插座。io了。我们这里用ws
  

  

,,,安装ws命令:<代码> npm安装,节省ws>   

3。安装好模块后,在你目录下创建一个js文件,我这是一个js

  

我这里肯定会比你们的文件要多,不用在意。

  

使用node . js实现微信小程序实时聊天功能

  

然后打开这个. js文件,开始编辑你的服务端代码,这个随便你用记事本还是其他什么软件

  

这是最简单基础的一个打开连接,响应的代码:

     //引入ws模块   const WebSocket=要求(ws);//创建服务港口是端口   新WebSocket const wss=7衿?{端口:80});//客户端连接时会进这个   wss。(“连接”,函数连接上(ws) {   console.log(“连接成功”);//客户端发送消息时会触发这个   ws。(“消息”,函数传入的(数据){   console.log(“收到消息”);//数据是客户端发送的消息,这里clients.foreach是广播给所有客户端   wss.clients。forEach(功能(客户端){//把客户端发来的数据,循环发给每个客户端   client.send(数据);   });   });   });      

这里贴上稍微比较完善的代码,这里是用数据库保存的发送的消息,用的mysql,所以需要在安装mysql模块

  

<代码> npm安装,节省mysql

  

代码:   

,这里有很多注释的代码,都是我鼓捣时用到的,可以无视或删掉

  

,这个MySQL的数据连接需要根据自己的修改,表也是

  

,我这用到的表就两个字段id、味精

        var http=要求(“http”);   var qs=要求(参数);//var ws=要求(ws);   var=http服务器。res createServer(函数(点播){   res.end(“这是一个websocket服务器!”);   });   var url=要求(url);//验证函数   函数ClientVerify(信息){   var ret=false;//拒绝//url参数   var params=url.parse (info.req。url,真的).query;//console.log (groupid);//groupid=params [' groupid ']//谁谁谁来到了讨论组//wss.clients。forEach(功能(客户端){//client.send (' 233 ');//});   返回true;   }   var wss=new ws。服务器({服务器:服务器verifyClient: ClientVerify});/*//引入数据库   var mysql=要求(mysql);//连接数据库信息普通版   var=mysql.createConnection({连接   主持人:“58.87.94.16”,   用户:“根”,   密码:“根”,   数据库:“bootdo”   }); *///引入数据库   var mysql=要求(mysql);//创建数据池   常量池=mysql.createPool ({   主持人:' 58.87.94.16 ',//数据库地址   用户:“根”,//数据库用户   密码:‘根’,//数据库密码   数据库:“bootdo”//选中数据库   })/*接收一个sql语句以及所需的值   这里接收第二参数的值的原因是可以使用mysql的占位符“& # 63;”   比如查询(' select *从my_database id=& # 63;”, [1])   好像可以直接使用pool.query,暂时不明*/让查询=函数(sql、值、回调){   pool.getConnection(函数(呃,康涅狄格州){   如果(err) {   回调(呃,空,空);   其他}{   conn.query (sql、值、函数(犯错,结果,字段){//释放连接   conn.release ();//事件驱动回调   回调(犯错,结果,字段);   });   }   });   };   module.exports=查询;   wss。(“连接”,函数连接上(ws) {   console.log('链接成功!”);//console.log (ws);//查询历史聊天记录广播给连接的客户端   var sql=' select *从hi_test groupid=1”;   console.log (' sql语句”,sql);   查询(sql函数(呃,res,字段){   控制台。日志(' sql操作返回:“,res);   如果(res !=null) {   ws.send (JSON.stringify (res));   }   });//监听客户端发送得消息   ws。(“消息”,函数传入的(数据){   console.log('来自客户端得信息:”,数据);//保存客户端发送得消息到数据库   sql="插入hi_test (msg)值(& # 63;)”;   console.log (' sql语句”,sql);   查询(sql、数据功能(呃,res,字段){   console.log (' sql操作返回:“,res);//res.insertId   });   var sendData=https://www.yisu.com/zixun/JSON.stringify([{味精:数据}])/* *   *把消息发送到所有的客户端   * wss.clients获取所有链接的客户端   */wss.clients。forEach(功能(客户端){   client.send (sendData);   });   });   });   服务器。听(80年,函数听(){   console.log(“服务器启动成功!”);   });/*发起得到请求={var选项   主机名:www.tjjxsoft.cn,   路径:/attendanceParameter/getAttendanceParameter/13,   方法:“得到”   };   var点播=http。请求(选项,函数(res) {   控制台。日志(的状态:“+ res.statusCode);   res.on(“数据”,函数(块){   控制台。日志(“返回数据:“+块);   });   });   要求的事情。(“错误”,函数(e) {   控制台。日志(“问题的要求:”+ e.message);   });   req.end (); *//*/! *构建http服务* !/应用var=要求(http) .createServer ()/! *引入socket . io * !/var io=要求(socket . io)(应用);/! *定义监听端口,可以自定义,端口不要被占用* !/var端口=80;/! *监听端口* !/app.listen(港口);/! *定义用户数组* !/var用户=[];/* * !   *监听客户端连接   * io是我们定义的服务端的插座   *回调函数里面的插座是本次连接的客户端插座   * io与套接字是一对多的关系/* !   io。(“连接”,函数(插座){/! *所有的监听,与发送排放都得写在连接里面,包括断开连接* !/on(“登录”功能(数据){   console.log('有人登录了:')   console.log(数据);   users.push ({   用户名:data.username   });/! *向所有连接的客户端广播添加事件* !/io.sockets.emit(“添加”,数据)   })   })   控制台。null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

使用node . js实现微信小程序实时聊天功能