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

nodejs搭建简单的websocket服务端的更多相关文章

  1. 用nodejs快速实现websocket服务端(带SSL证书生成)

    有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...

  2. Netty 搭建 WebSocket 服务端

    一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...

  3. asp.net网站作为websocket服务端的应用该如何写

    最近被websocket的一个问题困扰了很久,有一个需求是在web网站中搭建websocket服务.客户端通过网页与服务器建立连接,然后服务器根据ip给客户端网页发送信息. 其实,这个需求并不难,只是 ...

  4. Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端

    Microsoft.Owin.Security.OAuth搭建OAuth2.0授权服务端 目录 前言 OAuth2.0简介 授权模式 (SimpleSSO示例) 使用Microsoft.Owin.Se ...

  5. 树莓派(Raspberry Pi)搭建简单的lamp服务

    树莓派(Raspberry Pi)搭建简单的lamp服务: 1. LAMP 的安装 sudo apt-get install apache2 mysql-server mysql-client php ...

  6. C# WebSocket 服务端示例代码 + HTML5客户端示例代码

    WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...

  7. Linux搭建SVN服务器(服务端)

    Linux搭建SVN服务器(服务端) 1 安装SVN SVN客户端:TortoiseSVN,官网下载:https://tortoisesvn.net/downloads.html(客户端) # yum ...

  8. 无框架完整搭建安卓app及其服务端(一)

    技术背景: 我的一个项目做的的是图片处理,用 python 实现图片处理的核心功能后,想部署到安卓app中,但是对于一个对安卓和服务器都一知半解的小白来说要现学的东西太多了. 而实际上,我们的项目要求 ...

  9. DotnetBrowser入门教程-(3)启动与使用简单的WebSocket服务

    websocket是个很好的通信协议,基本可以贯穿支持html5的所有设备.dotnetbrowser内置了对websocket服务端与客户端的支持.请看例子: 1.新建桌面项目,基于.net 4.0 ...

随机推荐

  1. python 浮点数保留小数

    http://www.cnblogs.com/Raymon-Geng/p/5784290.html 这里有三种方法, round(a,2) '%.2f' % a Decimal('5.000').qu ...

  2. EasyMvc入门教程-高级控件说明(16)信息框控件

    网页开发的时候,会经常向用户显示一些信息,比如执行结果,注意事项等,下面展示一种最简单的信息提示: 代码如下: @Html.Q().Msg().Text("初始化信息").Auto ...

  3. HDU 5360 Hiking(优先队列)

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  4. 利用iptables的NAT代理实现内网访问外网

    利用NAT代理实现内网访问外网 背景及原理 若局域网中的两台计算机只能有一台能够访问外网,而这两台计算机之间能相互通信,那么可以配置能访问外网的那台服务器实现路由器的功能,即实现其他机器的NAT转换, ...

  5. Java数据结构-线性表之静态链表

    静态链表的定义: 节点由一个一维数组和一个指针域组成,数组用来存放数据元素,而指针域里面的指针(又称游标)用来指向下一个节点的数组下标. 这种链表称之为静态链表. 链表中的数组第一个和最后一个位置须要 ...

  6. UVA1406 - A Sequence of Numbers(树状数组)

    UVA1406 - A Sequence of Numbers(树状数组) 题目链接 题目大意: 给定N个数字.给两种操作:C x: 把这N个数字都加上x. Q x:查询这N个数里面有多少个数字和2^ ...

  7. linux 挂载移动盘

    http://www.2cto.com/os/201411/354319.html 磁盘出现问题,有时候卸载不掉 参见http://blog.csdn.net/davil_dev/article/de ...

  8. hdu1198Farm Irrigation(dfs找联通)

    题目链接: 啊哈哈,选我选我 思路是:首先依据图像抽象出联通关系.. 首先确定每一种图形的联通关系.用01值表示不连通与不连通... 然后从第1个图形进行dfs搜索.假设碰到两快田地能够联通的话那么标 ...

  9. ICON小工具如何使用

    对于ICON这个小资源,我们可以手动绘制.选择bmp图形的大小,尤其是旁边的选择工具(矩形或者弧形),我们可以通过选择工具挪动我们手动绘制的图标,其实图标只有中间那部分有用,其他没有用.还有最右边色拾 ...

  10. VueJS表单控件操作

    概念说明 v-model指令:在表单控件元素上创建双向数据绑定.v-model 会根据控件类型自动选取正确的方法来更新元素. 输入框 实例中演示了 input 和 textarea 元素中使用 v-m ...