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

来源:互联网 发布:json转化为字符串 编辑:程序博客网 时间:2024/05/22 07:04

文章背景

开发组里老大知道我会一些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 0
原创粉丝点击