用node搭建一个简单的websocket服务器

文章背景

开发组里老大知道我会一些android,于是让我负责把消息推送功能集成在客户端上,我想:这不简单。于是乎找很快集成第三方提供的推送服务做了个demo,但是老大的老大不乐意了,说推送服务器要自己搞,还必须用node.js做,大三到实习现在我一直用Java写代码。但是nodejs只是听说,从来就用过,但是已经接锅了,学吧!

正文

接锅之后穿梭于百度谷歌官网搜集资源,一天下来忙了这些事情

1.安装node.js+npm),更改位于C盘的默认路径(global_node_modules/npm-cache等),后来npm全局安装无法引用(NODE_PATH配错了)的原因,这一步卡了好一段时间,不过这也值了,差不多摸清了node的开发环境结构

2.工欲善其事必先利其器,起初打算用jetbrain旗下的webstorm,毕竟以前用android studio的时候觉得很有极客感,发现要钱,还比较厚重,于是选择了sublime text2(现在也有beta的3版本),后来写js的时候发现一点都不好用,dos命令窗和编辑器之间来回切,心累,难道我用的是假的st?网上一查,发现少装了插件,package control一装,好似发现新世界,nodejs,npm插件一鼓捣,差不多告别命令行了,然后兴奋的安装了emmet和其他一些自动补全高亮插件,甚至装个主题插件美化一下,为此陶醉了好一段时间,大概长这样

发现快下班了,赶紧接着干

3.想实现消息的推送肯定离不开websocket,websocket是什么,我根据掌握的知识简单介绍一下(如果讲错了欢迎指正):与http属于同一档的通信协议协议名称ws,如ws://127.0.0.1:8888/,她的特性如下:

3.1全双工通信,即服务器和客户端可相互发送报文

3.2保持长连接,与http不同,websocket发起请求,服务进行响应握手成功并不马上关闭连接,而是保持连接状态直到主动断开。

我们很容易就知道的应用领域了,对,IM(即时通讯)是很重要的一部分,在达到一定数量级的请求下,相比于用http做ajax轮询不知道高到哪里去了。

使用node实现websocket服务器有多种方式,websocket ,ws,socket.IO,还有我忘了,我选用了ws,原因很单纯:npm安装之后网上Ctrl+CV一份很短的代码,直接就跑起来了,听说socket.IO很不错的,有兴趣的朋友可以试试,ws方式的代码如下:

const WebSocketServer = require('ws').Server;
// 创建websocket服务器
const wss = new WebSocketServer({ port: 8888 });
// 注册连接开启事件,同时其他事件的初始化
wss.on('connection', function (ws) {
    console.log('ws client connected');
//接收客户端发送的报文事件
    ws.on('message', function (data) {
        ws.send('from ws:8888');
    });
    // 注册连接关闭事件
    ws.on('close', function (message) {
        //code
    });
});
console.log('websocket server running at ws://127.0.0.1:8888/');
为了能够让websocket对象能够让后端的Java项目的代码控制,接着建立一个http节点与后者所在服务器进行通信,代码如下:
const express = require('express');
const app = express();
// 向Java提供单条数据发送的接口
app.get('/push',function(req,resp){
    //code
})
// 创建http服务器
app.listen(8787,function(){
    console.log('http server running at http://127.0.0.1:8787/');
    // 配置资源文件路径
    app.use(express.static('../public'));
});
总体的通信流程如下:

总结

       写到这里不禁要感叹一下nodejs的强大:不同于Java,php等依赖于第三方服务器,node分分钟就建立了一个服务节点,并在上文中可以看到,服务也是抽象的对象,在代码中http和ws节点可以很自然而然地共用彼此的数据

       此后还有包括websocket连接对象管理nodejs代码模块化没有说完,当时写到这就下班了,有时间日后y我会接着开一篇文章写完的,因为是第一次使用nodejs,所以有什么错误的地方希望大家指出,非常感谢

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值