node+express+webSocket实现群聊后台功能

创建express项目

首先确定安装了nodenpm,然后新建文件夹,控制台打开当前文件夹或者vscode终端

  1. npm init创建一个初始化的pagkage.json文件
npm init

2.选择当前文件的入口
entry point:当前文件的入口
3.安装依赖

npm install express --save

创建好项目之后,在根目录新建index.js文件(根据你的入口文件名 新建文件)

安装nodejs-websocket

npm install nodejs-websocket

安装完成之后,在index.js导入

//导入express
var express = require('express');
//创建实例
var app = express()
//导入websocket
var ws = require("nodejs-websocket")

创建websocket连接

var server = ws.createServer(function (conn) {
    console.log("创建一个新的连接--------");
    var mes = {};
    a++;
    conn.nickname=user+a
    mes.type = "enter";
    mes.data = conn.nickname + " 进来啦"
    broadcast(JSON.stringify(mes));
    //向客户端推送消息
    conn.on("text", function (str) {
            mes.type = "message";
            mes.name=conn.nickname;
            mes.data =  str;
            broadcast(JSON.stringify(mes));
        // }
        console.log("回复 "+str)
    });
  
    //监听关闭连接操作
    conn.on("close", function (code, reason) {
        console.log("关闭连接");
        mes.type = "leave";
        mes.data = conn.nickname+" 离开了"
        broadcast(JSON.stringify(mes));
    });

    //错误处理
    conn.on("error", function (err) {
        console.log("监听到错误");
        console.log(err);
    });
    //监听端口号
}).listen(8000);

function broadcast(str){
    server.connections.forEach(function(connection){
        connection.sendText(str);
    })
}

如果出现跨域问题 允许全部用户访问

app.all('*', function (req, res, next) {   //设置全局的全域问题,我这里是把所有的全部允许了,如果不怕麻烦或者业务需求,你也可以在请求里面写对应的跨域问题
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

完整代码

//导入wxpress
var express = require('express');
var app = express()
app.all('*', function (req, res, next) {   //设置全局的全域问题,我这里是把所有的全部允许了,如果不怕麻烦或者业务需求,你也可以在请求里面写对应的跨域问题
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});
var ws = require("nodejs-websocket")
var port=8000;
var name='dog';
var a=1;

// 创建一个连接
var server = ws.createServer(function (conn) {
    console.log("创建一个新的连接--------");
    var mes = {};
    a++;
    conn.nickname=name+a
    mes.type = "enter";
    mes.data = conn.nickname + " 进来啦"
    broadcast(JSON.stringify(mes));
    //向客户端推送消息
    conn.on("text", function (str) {
            mes.type = "message";
            mes.name=conn.nickname;
            mes.data =  str;
            fn(JSON.stringify(mes));
        // }
        console.log("回复 "+str)
    });
  
    //监听关闭连接操作
    conn.on("close", function (code, reason) {
        console.log("关闭连接");
        mes.type = "leave";
        mes.data = conn.nickname+" 离开了"
        fn(JSON.stringify(mes));
    });

    //错误处理
    conn.on("error", function (err) {
        console.log("监听到错误");
        console.log(err);
    });
}).listen(port);

function fn(str){
    server.connections.forEach(function(connection){
        connection.sendText(str);
    })
}

前端怎么使用websocket建立连接 请见另一个文章,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值