nodejs 做服务端基本功能实现
http服务
- express 模块
数据库服务
- mysql模块
UDP消息下发和接收
- dgram 模块
- 服务端:echoServerUdp.js
- 客户端:echoClientUdp.js
- web服务器中一般使用udp的客户端将页面的udp消息请求转发到java,c程序等,详见login.js(41-81)
websocket服务,实现简单的聊天服务器和页面数据实时刷新
- ws 模块
- websocket的服务端开启的是基于tcp的双工通信,可与nodejs服务写在一起,同时开启即可(注意端口不能冲突),详见login.js(84-110)
nodejs http请求拦截器
- 作用: 防止未登录的用户或权限不够的用户访问数据库等资源文件夹,造城不安全隐患
- 实现原理: nodejs的http请求可以被多级过滤,例如请求: ‘/getData’ 这个接口,可以先经过 ‘/*’ 来判断请求中是否有合法的cookie 或 session ,验证通过后,调用 next() 方法可将该请求交给 app.post(‘/getData’) 继续处理
- 详见 login.js(116-147)
cookie 的使用(session后续再补充)
- 作用:用户身份认证,用户登录限制
- 原理: cookie是http请求头中的一个字段,内容是一个json,其中的sid等字段都可以在服务端设置,也可以在收到客户端请求是拿来验证用户身份
- 详见:login.js 中的http请求拦截器和 ‘/login’ 接口
vue + axios 前后端交互的实现
axios 的http请求拦截和响应拦截
- 作用: 请求拦截可以给每次发起的http请求都加上相同的字段,例如: www/index.html 中除了登录请求以外的所有http请求都加了 { user: ‘admin’} 请求参数;响应拦截可以针对服务端发送过来的异常数据做拦截,然后做出对应的处理
- 优势: 可以大大减少相同的代码的书写次数,精简代码,同时也可以大大降低错误几率
- 注意: http请求拦截和响应拦截方法的作用域,尽量设置为全局方法,以免漏掉某些请求
websocket协议实现简单的web聊天
- 原理:用户先向服务端发送一次http请求,服务端的websocket端口收到该请求后将本次http协议请求升级到基于tcp通信的websocket协议,并与该客户端形成一条互相通信的通道,此间服务端可主动向客户端发送数据,客户端的onmessage方法可接收并处理服务端发送过来的消息,直到服务端发起关闭通道的消息才结束
- 客户端:详见 www/js/wsClint.js
- socket = new WebSocket(“ws://192.168.0.21:8081/”); 开启websocket客户端连接
- websocket的属性方法: 详见W3C: https://www.w3cschool.cn/html5/html5-websocket.html
- 聊天室就是基本的显示一些信息,点击发送按钮时,向服务端发送tcp消息即可
websocket实现表格实时刷新
- 原理同上
- 优势: 相较于页面设置定时器定时发起http请求查询数据库的方法,这样的刷新占用系统内存更少
- 适用场景: 需要实时刷新,并且长时间监测的页面(如股票K线图等)
- 客户端:详见 www/js/wsClint.js
- 消息处理详见: www/index.html