首页 > 其他 > 详细

前台:VueSocketIOExt+socket.io-client,后台socket.io的聊天环境搭载

时间:2021-04-30 22:26:41      阅读:36      评论:0      收藏:0      [点我收藏+]

一、前台

本来我是直接使用socket.io-client,但是不知道是我没有跨域还是什么原因,最开始的时候安装官方文档的做法,老是不能成功建立连接,所以我就再下载了一个VueSocketIOExt,它依赖于socket.io-client并扩展了socket.io-client。

所以前台需要做的如下:

1. 下载socket.io-client与VueSocketIOExt

npm install vue-socket.io-extended socket.io-client --save

2.在main.js或者单独建立一个js文件引入下面内容:

import Vue from vue
import io  from "socket.io-client";//socket
import VueSocketIOExt from vue-socket.io-extended;
const socket = io(/);//此处为需要和后台建立链接的地址,前端一般要跨域处理 本来此处根据下面的跨域处理应该为onst socket = io(/socket.io),但是我发现默认socket访问的地址就带有socket.io,所以此处我直接一根斜杆即可。这里随机应变
Vue.use(VueSocketIOExt, socket);

3.跨域处理。 新建vue.config.js并输入以下内容(只看跨域部分处理即可,下面我贴了我的项目的所有配置):

const webpack = require("webpack");
module.exports = {
  configureWebpack: {
    resolve: {
      alias: {
        assets: "@/assets", //静态资源文件夹
        // ‘common‘: "@/common", //工具包文件夹
        components: @/components, //组件文件夹
        network: @/network, //网络请求文件夹
        views: @/views, //视图文件夹
        util: @/util //工具类文件夹
      }
    },
    //支持jquery
    plugins: [
      new webpack.ProvidePlugin({
        $: "jquery",
        jQuery: "jquery",
        "windows.jQuery": "jquery"
      })
    ]
  },
  //    // 配置跨域
  devServer: {
    //设置代理
    proxy: {
      "/api_hu66": {
        // 允许访问数据的计算机名称
        target: http://localhost:3000,
        ws: true, //启用webSocket
        changeOrigin: true, //开启代理跨域
        pathRewrite: {
          // 重写api地址
          ^/api_hu66: ""
        }
      },
      "/api_soTi": {
        // 允许访问数据的计算机名称
        // target: ‘http://api.51aidian.com/api/cha.php‘,
        target: http://api.51aidian.com,
        ws: true, //启用webSocket
        changeOrigin: true, //开启代理跨域
        pathRewrite: {
          // 重写api地址
          ^/api_soTi: ""
        }
      },
      /socket.io: {//此处为socket跨域
        target: http://localhost:3000,
        ws: true,
        changeOrigin: true
      },
      //  ‘sockjs-node‘: {
      //   target: ‘http://localhost:3000‘,
      //   ws: false,
      //   changeOrigin: true
      //  },
    },
    disableHostCheck: true
  }
  //   css: {
  //     extract: true, // 是否使用css分离插件 ExtractTextPlugin
  //     sourceMap: false, // 开启 CSS source maps?
  //     loaderOptions: {
  //         scss: {
  //           prependData: `
  //           @import "@/assets/scss/my.scss";
  //         `
  //         }
  //     }, // css预设器配置项
  //     requireModuleExtension: false // 启用 CSS modules for all css / pre-processor files.
  // },
}

4.新建chat.vue进行测试,在created生命周期里面输入以下内容

 // 1.聊天套接字
      //告诉后台,用户进入聊天界面,此时后台会回传未读消息
                    this.$socket.client.emit(send message, {
                        msg: "用户进入chat",
                        users: localStorage.Login_user
                    });

二、后台:

1.下载

npm install socket_io --save

2.新建mySocket.js

var socket = {}
var socket_io = require(socket.io);
function getSocket(server){

  var io = require(socket.io)(server);
   // var io = socket_io.listen(server);//监听传入的server
   
     // 10.1connection监听单个连接.
   io.on(connection,function(socket){
     console.log("我来了,宝贝");
     console.log("id为"+socket.id+"成功建立连接!");
     io.emit(this, { will: be received by everyone})
     socket.on(send message,(data)=>{  
      console.log("接收到前台传来的数据:",data)  
      // 通过message事件给前端发送数据  
      socket.emit(message, {  
        msg: `new message`,  
        });  
      });   
  /****************************************************************************** */
     //10.2监听进入聊天模块
     socket.on(enterChat,async(data)=>{
       console.log("用户进入:",data)
     })

  /****************************************************************************** */
     //10.3监听已读,已读则把已读标签设置为true
     socket.on("hasRead",async(data)=>{
        
    })

  /****************************************************************************** */   
     //10.4监听客户端发送的信息,监听用户上线,如果在线直接利用onlineChat封装数据,发送给前端
     socket.on(client,async function(data){
      
      
     })

  /****************************************************************************** */   
    // 10.5监听断开
    socket.on(disconnect,async(reason)=>{
      console.log("id为"+socket.id+"的用户端口断开……断开原因:"+reason);
    })
  });
   console.log("启动socket...")
 }

socket.getSocket = getSocket;
//导出socket
module.exports = socket

3.app.js导入

let express = require("express")
let app = express()
var port = (3000);
app.set(port, port);
var http = require(http);
// // 套接字模块
//创建HTTP server
var server = http.createServer(app);
// // 导入socket的封装方法
var socket = require("./weteach_routes/mySocket")
socket.getSocket(server)
//此处变成http listen
server.listen(port);
// app.listen(3000,()=>{console.log("服务器启动……")})
// 导出
module.exports = app;

测试结果:

技术分享图片

 

前台:VueSocketIOExt+socket.io-client,后台socket.io的聊天环境搭载

原文:https://www.cnblogs.com/hmy-666/p/14723380.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!