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