• nodejs搭建简单的websocket服务端


    创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下:

    npm install nodejs-websocket

    1.搭建websocket服务端(app.js)

    
    

      //websocket
      var ws = require('./node_modules/nodejs-websocket');

    var server = ws.createServer(function (connection) {
        //接收到字符串str
        connection.on("text", function (str) {
    });
    connection.on(
    "close", function () {
        //客户端关闭   
    }); connection.on("error", function () { //error }); }); //服务端开启监听127.0.0.1:8000 server.listen(8000, "127.0.0.1", () => { console.log("server running at 127.0.0.1:8000"); });

    2. 创建events事件管理(EventsMs.js)

    var EventsMs = module.exports;
    
    var EventEmitter = require('events').EventEmitter;
    var emitter = new EventEmitter();
    
    /**
     * 派发事件
     * key 事件名称
     * fun 事件
     * is_only 是否唯一
     */
    EventsMs.dispatch = function (key, fun, is_only) {
        if (is_only) {
            //移除当前key的所有监听
            emitter.removeAllListeners(key);
        }
        //注册事件
        emitter.addListener(key, fun);
    }
    
    /**
     * 触发事件
     * key 事件名称
     */
    EventsMs.trigger = function (key, info) {
        emitter.emit(key, info);
    }

    3.服务端接收数据详解

    客户端通过使用websocket访问服务端(127.0.0.1:8000)时,服务端通过server对象中的str获取到客户端传递过来的参数

        //接收到字符串str
        connection.on("text", function (str) {
         var data = JSON.parse(str); });

    为了数据传输方便,将数据格式固定为 {code:事件编码,info:传输数据},使用JOSN.parse方法获取到传递过来的数据。根据code值进行寻找相应的处理方法处理请求

    4.客户端请求的处理方法

       //引用事件管理(EventsMs.js)
        var events = require("EventsMs");
         
        ....todo
        
         //接收数据
        connection.on("text", function (str) {
            var client = JSON.parse(str);
            if (client.code) {
                var info = {
                    data: client
    conn: connection }; events.trigger(client, info); } });

    5.服务端处理请求方法(Handler.js)

    var Handler = module.exports;
    var events = require("EventsMs");
    
    Handler.register = function () {
        events.dispatch(监听的事件编号, function (info) {
        //当前用户的链接
    var conn = info.conn;
        //客户端传递过来的数据
    var data = info.data;
        //服务端返回数据
    var msg = JSON.stringify({
            //jsonata }); //向客户端返回数据
        conn.sendText(msg);
    }, true); }

    6.在 入口文件(app.js)中注册Handler.js的事件监听

    //服务端开启监听
    server.listen(8000, "127.0.0.1", () => {
        registerServer();
        console.log("server running at  127.0.0.1:8000" );
    });
    
    /**
     * 注册所有服务
     */
    function registerServer() {
        require("Handler"). register();
    }

    至此,基于nodejs的websocket服务端搭建完成,新建事件监听的时候可以新建Handler.js或者在现有的Handler.register方法中添加events.dispatch

  • 相关阅读:
    缓慢变化纬的解决方法
    行转列且有序
    异常处理
    继承
    js的隐式转化
    初步了解微任务
    axios中断请求AbortController
    Vue解决V-HTML指令潜在的XSS攻击('v-html' directive can lead to XSS attack vue/no-v-html)
    axios下载后台传过来的流文件并设置下载文件名(如excel)
    axios异步获取文件流数据
  • 原文地址:https://www.cnblogs.com/z-yue/p/5729418.html
Copyright © 2020-2023  润新知