亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用node.js實現微信小程序實時聊天功能

2019-11-19 13:16:18
字體:
來源:轉載
供稿:網友

在微信這個聊天工具里的小程序上實現聊天功能,總感覺怪怪的。但領導要求了,總是要干的。

然后就實時通訊這個關鍵詞展開搜索,穿梭于網頁之間。不過粘貼復制的真的太多了,找了半天也沒找到想要的,不過還是提取到了關鍵詞的WebSocket和node.js的,然后搜索這兩是啥,什么關系,總算明白了一點。

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

1.首先到官網下載node.js,下載鏈接

   安裝很簡單,雙擊下載好的文件,直接下一步一步,沒什么特殊的選擇,路徑默認就好

   可以打開命令行窗口輸入 node -v會輸出版本,來檢驗是否安裝成功,其實這個也沒什么必要

2.然后新建一個文件夾(我的node.js是安裝在Ç盤的,然后再d盤下新建了個叫webSocket的文件夾)

   然后用命令轉到該目錄下:在這個文件下安裝我們要使用的模塊:安裝模塊前需要先生成一個配置文件,不然會報錯(反正我報了)

   生成配置文件命令:npm init -f

    執行后可以看到在該文件下多了一個叫package.json的配置文件,先不用管(后面也沒管過),接下來繼續安裝模塊的操作

   剛開始我是安裝的socket.io,后來發現小程序根本用不了,所以這里也不說socket.io了。我們這里用ws

    安裝ws命令:npm install --save ws(卸載模塊命令:npm uninstall  模塊名字)

3.安裝好模塊后,在你目錄下創建一個.js文件,我這是一個ws.js

我這里肯定會比你們的文件要多,不用在意。

然后打開這個.js文件,開始編輯你的服務端代碼,這個隨便你用記事本還是其他什么軟件

這是最簡單基礎的一個打開連接,響應的代碼:

//引入ws模塊const WebSocket = require('ws');//創建服務 port是端口const wss = new WebSocket.Server({ port: 80});//客戶端連接時會進這個wss.on('connection', function connection(ws) {  console.log('連接成功');  //客戶端發送消息時會觸發這個  ws.on('message', function incoming(data) {    console.log('收到消息');    //data是客戶端發送的消息,這里clients.foreach是廣播給所有客戶端    wss.clients.forEach(function each(client) {      //把客戶端發來的data,循環發給每個客戶端      client.send(data);    });  });});

這里貼上稍微比較完善的代碼,這里是用數據庫保存的發送的消息,用的mysql,所以需要在安裝mysql模塊

npm install --save mysql

代碼:

 這里有很多注釋的代碼,都是我鼓搗時用到的,可以無視或刪掉

 這個MySQL的數據連接需要根據自己的修改,表也是

 我這用到的表就兩個字段 id ,msg

var http=require('http');var qs = require('querystring'); //var ws=require('ws');var server=http.createServer(function (req, res) {  res.end("This is a WebSockets server!");});var url = require('url');//驗證函數function ClientVerify(info) {  var ret = false;//拒絕  //url參數  var params = url.parse(info.req.url, true).query;  //console.log(groupid);  //groupid=params['groupid']  //誰誰誰來到了討論組  // wss.clients.forEach(function each(client) {  //   client.send('233');  // });  return true;}var wss = new ws.Server( { server: server,verifyClient: ClientVerify } );/*//引入數據庫 var mysql = require('mysql'); //連接數據庫信息 普通版 var connection = mysql.createConnection({  host : '58.87.94.16',  user : 'root',  password : 'root',  database : 'bootdo'});*///引入數據庫var mysql = require('mysql');// 創建數據池const pool = mysql.createPool({  host   : '58.87.94.16',  // 數據庫地址  user   : 'root',  // 數據庫用戶  password : 'root',  // 數據庫密碼  database : 'bootdo' // 選中數據庫})/*接收一個sql語句 以及所需的values這里接收第二參數values的原因是可以使用mysql的占位符 '?'比如 query(`select * from my_database where id = ?`, [1])好像可以直接使用pool.query,暫時不明*/let query = function(sql,values,callback){  pool.getConnection(function(err,conn){    if(err){      callback(err,null,null);    }else{      conn.query(sql,values,function(err,results,fields){        //釋放連接        conn.release();        //事件驅動回調        callback(err,results,fields);      });    }  });};module.exports=query;wss.on('connection', function connection(ws) {  console.log('鏈接成功!');  //console.log(ws);  //查詢歷史聊天記錄 廣播給連接的客戶端  var sql='select * from hi_test where groupid=1';  console.log('sql語句',sql);  query(sql,function (err,res,fields) {    console.log('sql操作返回:', res);    if(res!=null){      ws.send(JSON.stringify(res));    }  });  //監聽客戶端發送得消息  ws.on('message', function incoming(data) {    console.log('來自客戶端得message:',data);    //保存客戶端發送得消息到數據庫    sql="insert into hi_test(msg) values(?)";    console.log('sql語句',sql);    query(sql,data,function (err,res,fields) {      console.log('sql操作返回:',res);//res.insertId    });    var sendData=JSON.stringify([{msg:data}])    /**     * 把消息發送到所有的客戶端     * wss.clients獲取所有鏈接的客戶端     */    wss.clients.forEach(function each(client) {      client.send(sendData);    });  });});server.listen(80, function listening() {  console.log('服務器啟動成功!');});/*發起get請求var options = {  hostname: 'www.tjjxsoft.cn',  path: '/attendanceParameter/getAttendanceParameter/13',  method: 'GET'};var req = http.request(options, function (res) {  console.log('狀態: ' + res.statusCode);  res.on('data', function (chunk) {    console.log('返回數據: ' + chunk);  });});req.on('error', function (e) {  console.log('problem with request: ' + e.message);});req.end();*//*/!*構建http服務*!/var app = require('http').createServer()/!*引入socket.io*!/var io = require('socket.io')(app);/!*定義監聽端口,可以自定義,端口不要被占用*!/var PORT = 80;/!*監聽端口*!/app.listen(PORT);/!*定義用戶數組*!/var users = [];/!** *監聽客戶端連接 *io是我們定義的服務端的socket *回調函數里面的socket是本次連接的客戶端socket *io與socket是一對多的關系 *!/io.on('connection', function (socket) {  /!*所有的監聽on,與發送emit都得寫在連接里面,包括斷開連接*!/  socket.on('login',function(data){    console.log('有人登錄了:')    console.log(data);    users.push({      username:data.username    });    /!*向所有連接的客戶端廣播add事件*!/    io.sockets.emit('add',data)  })})console.log('app listen at'+PORT);*/

然后命令行輸入node ws.js(你自己的文件名)回車,就已經啟動了服務

4.現在服務就已經起來了,接下來弄小程序這邊的

 直接貼代碼:

wxml:

<view class='homeView'>  <scroll-view scroll-y style="height:500px;" scroll-top='{{scrolltop}}'>    <view class='listView'>      <block wx:for="{{serverMsg}}" wx:key='*this'>        <!-- -->        <view wx:if="{{item.user.id!=userInfo.userId}}" class='leftView'>          <view class='name'>{{item.user.name}}</view>          <view class='imgmsgleft'>            <view>            <!-- 我這用的是自己另一個服務的圖片 -->              <image class='touimg' src='https://www.tjjxsoft.cn/static/images/img005.png'></image>            </view>            <view>{{item.msg}}</view>          </view>        </view>        <view wx:else class='rightView'>          <view class='name'>{{item.user.name}}</view>          <view class='imgmsg'>            <view>{{item.msg}}</view>            <view>            <!-- 我這用的是自己另一個服務的圖片 -->              <image class='touimg' src='https://www.tjjxsoft.cn/static/images/img005.png'></image>            </view>          </view>        </view>      </block>    </view>  </scroll-view>  <view class='sendView'>    <input bindinput='sendTextBind' placeholder="輸入聊天內容" value='{{sendText}}' />    <button bindtap='sendBtn' type="primary">發送</button>  </view></view>

js:

var app = getApp();Page({  data: {    socket_open: false,//判斷連接是否打開    sendText: "",//發送的消息    serverMsg: [],//接受的服務端的消息    userInfo: { userId: 1, name: "呵呵",img:'頭像'},//app.appData.userInfo,    scrolltop: 999  },  /**輸入內容 */  sendTextBind: function(e) {    this.setData({      sendText: e.detail.value    });    console.log(this.data.sendText);  },  /**發送消息 */  sendBtn: function(e) {    console.log('發送消息事件!');    var msgJson = {      user: {        id: this.data.userInfo.userId,//app.appData.userInfo.userId, //唯一ID區分身份        name: this.data.userInfo.name, //顯示用姓名        img: this.data.userInfo.img, //顯示用頭像      },      msg: this.data.sendText,//發送的消息      groupid:1    }    //發送消息    this.send_socket_message(JSON.stringify(msgJson));    this.setData({      sendText: ""http://發送消息后,清空文本框    });  },  onLoad: function(options) {    // app.login();    // this.setData({    //   userInfo: app.appData.userInfo    // });    //初始化    this.wssInit();  },  wssInit() {    var that = this;    //建立連接    wx.connectSocket({      url: 'ws://localhost'//app.appData.socket    })    //監聽WebSocket連接打開事件。    wx.onSocketOpen(function(res) {      console.log('WebSocket連接已打開!');      that.setData({        socket_open: true      });    });    //監聽WebSocket接受到服務器的消息事件。    wx.onSocketMessage(function(res) {      console.log('收到服務器內容:', res);      var server_msg = JSON.parse(res.data);      console.log(server_msg);      if (server_msg != null) {        var msgnew = [];        for (var i = 0; i < server_msg.length; i++) {          msgnew.push(JSON.parse(server_msg[i].msg));        }        msgnew=that.data.serverMsg.concat(msgnew);        that.setData({          serverMsg: msgnew,          scrolltop: msgnew.length * 100        });        console.log(that.data.serverMsg);      }    });    //監聽WebSocket錯誤。    wx.onSocketError(function(res) {      console.log('WebSocket連接打開失敗,請檢查!', res)    });  },  send_socket_message: function(msg) {    //socket_open,連接打開的回調后才會為true,然后才能發送消息    if (this.data.socket_open) {      wx.sendSocketMessage({        data: msg      })    }  }})

wxss:

.homeView {  border-top: 1px solid #ededed;}.listView{  padding-bottom: 50px;}.listView>view {  padding: 10px;}.rightView {  text-align: right;}.imgmsgleft {  display: flex;  justify-content: flex-start;  align-items: center;}.imgmsgleft>view:last-child {  border: solid 1px gray;  padding: 10px;  border-radius: 6px;}.imgmsg {  display: flex;  justify-content: flex-end;  align-items: center;}.imgmsg>view:first-child {  border: solid 1px gray;  padding: 10px;  border-radius: 6px;  background-color: green;}.touimg {  width: 50px;  height: 50px;}.name {  font-size: 14px;  color: gray;}.sendView {  display: flex;  width: 100%;  position: fixed;  bottom: 0px;  border-top: 1px #ededed solid;  background-color: white;}.sendView>button {  width: 20%;}.sendView>input {  width: 80%;  height: auto;}

效果圖:

預覽的時候一定要打開調試,因為這不是WSS協議,是沒法直接用的、

總結

以上所述是小編給大家介紹的使用node.js實現微信小程序實時聊天功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
懂色av一区二区三区| 日韩在线视频网| 97国产精品人人爽人人做| 北条麻妃一区二区三区中文字幕| 日韩精品中文字幕久久臀| 亚洲国产欧美自拍| 久久精品国亚洲| 亚洲free嫩bbb| zzijzzij亚洲日本成熟少妇| 国产综合在线看| 中文字幕日韩av电影| 国产精品久久国产精品99gif| 日本一本a高清免费不卡| 欧美精品www在线观看| 亚洲免费伊人电影在线观看av| 久久成人av网站| 亚洲最大中文字幕| 久久天天躁夜夜躁狠狠躁2022| 亚洲男女自偷自拍图片另类| 91精品国产乱码久久久久久蜜臀| 伊人久久综合97精品| 欧美高清视频在线观看| 91亚洲国产成人精品性色| 国产91在线高潮白浆在线观看| 美女福利精品视频| 欧美激情综合色综合啪啪五月| 91亚洲国产成人精品性色| 久久天天躁狠狠躁夜夜爽蜜月| 久久人人爽人人爽人人片av高清| 2019日本中文字幕| 在线观看精品国产视频| 精品久久久视频| 国产精品久久久久久久久久东京| 欧美日韩成人网| 国产精品久在线观看| 国产成人在线视频| 在线日韩日本国产亚洲| 欧美性生交xxxxx久久久| 精品久久国产精品| 欧美激情国产高清| 亚洲激情小视频| 激情成人在线视频| 色悠悠久久88| 亚洲国产精彩中文乱码av在线播放| 理论片在线不卡免费观看| 日韩欧美在线看| 91精品国产99久久久久久| 国产精品视频久久久久| 成人亚洲综合色就1024| 国内精品一区二区三区四区| 欧美激情亚洲综合一区| 91精品久久久久久久久久久| 亚洲国产精品悠悠久久琪琪| 日本精品久久中文字幕佐佐木| 日韩大陆欧美高清视频区| 国产精品网址在线| 2019中文字幕在线| 在线丨暗呦小u女国产精品| 国产精品网址在线| 久久精品视频在线观看| 国产精品一区二区三区久久| 国产精品第一区| 国产精品视频网| 国内伊人久久久久久网站视频| 国产成人一区三区| 91欧美视频网站| 亚洲精品电影网在线观看| 久久亚洲影音av资源网| 欧美一级大片在线观看| 亚洲美腿欧美激情另类| 日韩av网址在线观看| 日韩av资源在线播放| 亚洲欧美日韩中文在线制服| 国产精品香蕉在线观看| 91高清视频免费| 日韩美女av在线免费观看| 久久精品成人动漫| 久久99久久99精品中文字幕| 精品国偷自产在线视频| 成人黄色免费在线观看| 欧洲亚洲妇女av| 欧美日韩精品在线| 欧美xxxx综合视频| 日韩精品免费观看| 日本高清视频精品| 最新亚洲国产精品| 国产成人av在线| 91免费视频国产| 91色琪琪电影亚洲精品久久| 国产精品午夜国产小视频| 日韩欧美中文字幕在线观看| 亚洲电影免费观看高清完整版| 日韩精品福利在线| 亚洲成年网站在线观看| 高清欧美性猛交xxxx黑人猛交| 欧美日本亚洲视频| 亚洲偷欧美偷国内偷| 97精品国产97久久久久久| 亚洲综合日韩在线| 久久久久久久久网站| 精品久久久久久中文字幕一区奶水| 欧美一级视频在线观看| 日韩不卡在线观看| 永久免费精品影视网站| 一区二区欧美亚洲| 91久久精品国产91性色| 亚洲国产成人精品一区二区| 久久久999精品| 最近2019免费中文字幕视频三| 日韩av免费在线播放| 综合136福利视频在线| 国产成人精品网站| 亚洲欧美第一页| 亚洲另类欧美自拍| 欧美乱大交xxxxx| 4k岛国日韩精品**专区| 久久好看免费视频| 欧美一区二区大胆人体摄影专业网站| 日韩视频欧美视频| 国语自产精品视频在免费| 成人国内精品久久久久一区| 久久精品国产精品| 亚洲影视九九影院在线观看| 久久久天堂国产精品女人| 久久久久久国产精品美女| 国产精品一区二区3区| 日本精品久久久久久久| 欧美日韩激情视频| 亚洲精品v欧美精品v日韩精品| 成人黄色免费片| 91成人在线观看国产| 国产精品1区2区在线观看| 欧美最顶级丰满的aⅴ艳星| 亚洲电影在线看| 欧美日韩国产一区二区| 国产视频久久久久久久| 欧美国产日韩精品| 欧美与黑人午夜性猛交久久久| 国产成人精品日本亚洲| 国产亚洲精品久久久优势| 久久色在线播放| 九九热精品在线| 日韩精品视频免费专区在线播放| 亚洲男人天堂2019| 中文字幕国产日韩| 亚洲国产日韩欧美在线图片| 成人亚洲欧美一区二区三区| 精品国产欧美一区二区五十路| 精品少妇v888av| 亚洲国产女人aaa毛片在线| 久久99国产精品久久久久久久久| www.xxxx欧美| 久久影院中文字幕| 国产精品嫩草影院一区二区| 中文字幕欧美日韩| 91亚洲午夜在线| 日韩中文在线观看| 欧美在线视频一区二区| 国产精品pans私拍| 国模视频一区二区| 日韩精品中文字幕在线播放| 国外成人在线播放| 精品日韩视频在线观看| 久久午夜a级毛片|