zoukankan      html  css  js  c++  java
  • 【微信小程序】---Socket聊天功能实现

    一、什么是socket?

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socke

    本章案例中我们使用HTML5中的webSocket。

    websocket是HTML5开始提供的一种浏览器与服务器进行双向通讯的网络技术。

    使用websocket浏览器和服务器只需要做一个握手的动作,然后浏览器和服务器之间就形成了一条快速的通道,两者之间就可以互相传送

    好处:

    • 节省资源:互相沟通的Header是很小的 大概是2bytes。

    • 推送信息:不需要客户端请求,服务器可以主动传送数据给客户端

    服务端代码

    安装ws cnpm install ws -S

    const WebSocket = require('ws');
    //创建服务
    const wss = new WebSocket.Server({ port: 8080 });
    
    //当用户连接的时候回触发connection
    wss.on('connection', (client) => {
       //接收客户端消息
       client.on('message', (data) => {
           //遍历所有用户,将接收到的消息发送给所有的用户
           wss.clients.forEach((item) => {
               if (item.readyState === WebSocket.OPEN) {
                   item.send(data);
              }
          });
      });
    });

    客户端代码

    相关API

    • wx.connectSocket:创建一个WebSocket 连接

    • wx.onSocketOpen:监听 WebSocket 连接打开事件

    • wx.onSocketMessage:监听 WebSocket接受到服务器的消息事件

    • wx.sendSocketMessage:通过 WebSocket 连接发送数据。需要先wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送

    onLoad(){
         //链接socket
         wx.connectSocket({
           url: 'ws://192.168.1.9:8080',
           header: {
               'content-type': 'application/json'
          },
           method: "get",
           success: (data) => {
               //如果链接成功,则监听 WebSocket 连接打开事件
               if (data.errMsg == "connectSocket:ok") {
                   //监听 WebSocket 连接打开事件
    this.handleSocketOpen();
              }
          }
      })
       //接收服务端传递到客户端的消息
       this.handleSocketMessage();
    }
    //监听 WebSocket 连接打开事件
    handleSocketOpen(){
       wx.onSocketOpen(() => {
           //定义状态值,如果为true则表示监听成功
            this.flag = true
      })
    },
    //接收服务端传递到客户端的消息
    handleSocketMessage(){
      wx.onSocketMessage((data) => {
         console.log(data);
      })
    },
    //向服务端发送消息    
    handleSend(e) {
       //如果监听WebSocket 连接打开事件成功则发送消息
      if (this.flag) {
          wx.sendSocketMessage({
              data: this.data.message,
              success: (data) => {
                   console.log(data, 111);
              }
          })
      }
    }
    1、路在何方? 路在脚下 2、何去何从? 每个人都在探索,未来的方向在何处。如果说某些方向是世人已经公认的,那么就先按照公认的去走吧(ps:站在巨人的肩膀上看世界会清晰)。 如果说方向,当今世人还不清晰准确。那么就大胆往前走吧,对与错并不重要。心中的方向更加重要。
  • 相关阅读:
    http和https
    openstack
    openstack安全问题
    openstack优势
    java多线程实现方式
    python多进程实现的几种方式
    Java 在提取url 生成图片以及正则表达式
    idea 生成 可执行文件
    dw cs6 支持高分辨率
    svchost.exe 大量占用的问题
  • 原文地址:https://www.cnblogs.com/yuanjili666/p/11683266.html
Copyright © 2011-2022 走看看