在Node环境下socket.io前后端实时通信(聊天室的实现)

配置环境

前端环境:“socket.io-client”: “2.2.0”
后端环境:“socket.io”: “2.2.0”,
均在package.json中加上即可

在www服务器上引入socket.io模板

var socketIo = require("socket.io");//引入socket.io
var io = new socketIo(server);//将socket.io注入express模块

在webpack打包全局配置语法

new webpack.ProvidePlugin({
            io: 'socket.io-client',
            'window.io': 'io',
        }),

webpack反向代理配置

'/socket.io/*': {
                target: 'http://localhost:3000',
                host: 'http://localhost:3000',
                secure: false,
                onProxyRes: function onProxyRes(proxyRes, req, res) {

                }
            },

www服务器作为服务端

io.on("connection", function (socket) {
    // socket.io 使用 emit(eventname,data) 发送消息,使用on(eventname,callback)监听消息
    //监听客户端发送的 sendMsg 事件
    console.log("连接成功");
    socket.on('generate.html-register', function (id, msg) {
        // console.log("generate.html-register");
        socket.join('room')
    });

    socket.on('href.html-register', function (id, msg) {
        // console.log("href.html-register");
        socket.join('room')
    });


    socket.on('wechatLoginSuccessCallback', function (roomId) {
        console.log("服务器收到需要通知的客户端id:", roomId);
        socket.broadcast.to(roomId).emit("wechatLoginSuccessCallback", '');
    })

    socket.on('upload_file_success', function (msg) {
        socket.broadcast.to('room').emit("generate.html-uploadSuccess", '');//广播到'room'除了自己
        socket.emit("generate.html-uploadSuccess", '');//再将广播发给自己
    })
});

module.exports = io;

客户端使用

//因为本机使用localhost所以connect(url)中的url可以不填或者写http://localhost
var socket = io.connect();  //连接服务端
socket.emit("generate.html-register", '');  //发送信息,第一个参数为发送得到对象function,第二对象为内容

socket.on("generate.html-uploadSuccess", function (data) { //绑定监听(内容可忽略)

            $('#shadow').css("display","block");
            document.documentElement.style.overflowY = 'hidden';

            setTimeout(function () {
                $('#shadow').css("display","none");
                document.documentElement.style.overflowY = 'scroll';

                window.location.href = "preview.html";
            },5000);
        });
一般来说只有前端才能向后端请求,请求完成后端再做出响应反馈给前端。而socket.io机制就解决了后端可以主动向
前端发出请求,通过该原理即可实现聊天室的功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值