创建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