NodeJs+Websocket搭建推送接口

主要是通过nodejs搭建一个服务,完成一个实时推送的功能。有一个订单系统,希望在有新订单产生的时候,给每个客服都推送一条消息,而不是用ajax不断的访问数据库获取信息。我也是在网上找了一些,然后按照自己的需求进行了一定的修改。希望有借鉴作用。

直接上代码:

1.安装nodejs,引入模块,我这里用的是nodejs-websocket模块。我看也有用ws模块的,应该都没什么区别吧。

建一个文件夹nodeserver,进入文件夹,安装模块 npm install nodejs-websocket。创建文件nodeserver.js

var ws = require("nodejs-websocket");
console.log("开始建立连接...")
var server = ws.createServer(function(conn){
    conn.on("text", function (str) {
        console.log("收到的信息为:"+str)
        //开启广播,为所有连接的客户端发送数据
        server.connections.forEach(function (conn) {
		conn.sendText(str)
	})
    })
    conn.on("close", function (code, reason) {
        console.log("关闭连接")
    });
    conn.on("error", function (code, reason) {
        console.log("异常关闭")
    });

}).listen(8005)
console.log("WebSocket建立完毕")

因为都是封装好的模块,nodejs调用websocket还是挺方便的。大概流程就是,搭建一个服务,然后监听信息,收到匹配的信息之后群发。 这个文件建好之后,创建连接文件

2.创建senddata.html

    var mess = document.getElementById("mess");
    if(window.WebSocket){
		var Data_Return = {
			Number:"1111111",
			State:"N",
		}
        Data_Return = JSON.stringify(Data_Return);//
        var ws = new WebSocket('ws://127.0.0.1:8005');
        ws.onopen = function(e){
            console.log("连接服务器成功");
            ws.send("aaa");
        }
        ws.onclose = function(e){
            console.log("服务器关闭");
        }
        ws.onerror = function(){
            console.log("连接出错");
        }

        ws.onmessage = function(e){
            mess.innerHTML = "连接成功";
			if(e.data == 'Y'){
				alert('发送成功')
			}
            document.querySelector(".kuang").onclick = function(e){
                ws.send(Data_Return);
            }

        }
    }

这里把信息发送过去就行。

3.建立接收页面

var ifDio = true;
         var mess = document.getElementById("mess");
         if(window.WebSocket){
         var ws = new WebSocket('ws://127.0.0.1:8005');
         ws.onopen = function(e){
         //console.log("连接服务器成功");
         ws.send("{$Think.session.uid}");    //这里把每个用户的唯一标识发过去,区分用。。我是用的tp。
         }
         ws.onclose = function(e){
         //console.log("服务器关闭");
         }
         ws.onerror = function(){
         //console.log("连接出错");
         }
         ws.onmessage = function(e){
         //----------------这里判断接受的是不是json数据。
             if(e.data.charAt(0)=='{' ){
                 var getData = JSON.parse(e.data);
             }else{
                 var getData = '';
             }
			 if(getData.Number){
			 ws.send("Y");//接收成功之后,返回一个值,确定接收状态
			 }
         if(getData.Number && ifDio){
 ifDio = false;
//yourcode-------
         }
         }
         }

完事了,挺简单的。而且效果很不错.基本上每个页面都大同小异,无非跟着api走。

官方文档 https://www.npmjs.org/package/nodejs-websocket

随机浏览