原生nodejs编写在线聊天系统

前端自动化由来已久,最近为了编写自己的自动化工具,本人开始详细学习node,为了检验学习成果,决定编写一个类似于webqq的聊天系统。以下是该系统具有的模块。

  • 登录模块(自动登录)
  • 聊天模块(私聊,群聊)
  • 统计模块(一段时间内活跃的程度)
  • 地理模块(查找附近)

本文主要讲述如何用node.js编写静态资源服务器。

前期准备

既然要用node.js编写,首先是下载、安装最新版的node。

启动服务

nodejs 启动一个服务器的方法很简单,就是调用node的原生模块(http),调用其createServer方法即可。

const http = require(‘http‘);
const Until = require(‘./app/core/router‘);

global.BASE_DIR = __dirname;
global.VIEW = global.BASE_DIR + ‘/view/‘;

http.createServer((req, res) => { // 第一个参数为请求第二个参数为回应
    "use strict";
    Until.init(req.url, req).then(reslove => {
        if (!reslove) {
            return
        }
        res.writeHead(200, {‘Content-Type‘: reslove.type +‘; charset=utf-8‘}); // charset=utf-8 指定编码方式
        res.end(reslove.response)
    })
}).listen(3000) 端口号

路由

当启动服务之后,我们就要开始编写整个系统的路由,系统的所有请求其实分为三类:一是请求前端页面,二是请求静态资源,三是请求数据。我们需要有一些标记来辨识请求以便合理处理。

    getRes(url) {
        "use strict";
        url = url.toString();
        if (url.includes(‘.html‘) || (!url.includes(‘.‘) && !url.includes(‘/api/‘))) { // 页面
            return this.renderHtml();
        } else if (url.includes(‘/api/‘)) { // api
            return this.renderApi();
        } else if (url.includes(‘.‘)){
            return this.renderRrsource(); // 静态资源
        }
    },

下面以登录页面为例来说明请求及响应过程。我们假定‘/login‘为登录页面的链接,当服务器收到请求时,需要做两件事情,一是查找登录的页面,二是将页面返回给前台。

    // 检测文件是否存在 存在则返回文件
    renderFile (filename, num){
        "use strict";
        let path_arr = [global.VIEW + filename + ‘.jade‘, global.BASE_DIR + filename]
        return new Promise((reslove, reject) => {
            let path = path_arr[num], type;
            fs.access(path, (err) => { // 检测文件是否存在
                if (err) {
                    reject(err);
                } else {
                    if (num == 0) { // 返回页面
                        reslove({type: ‘text/html‘, response: jade.renderFile(path)})
                    } else { // 返回静态资源
                        fs.readFile(path, (err, data)=> {
                            if (err) {
                                reject(err)
                            } else {
                                if (path.includes(‘.css‘)) {
                                    type = ‘text/css‘
                                } else if (path.includes(‘.js‘)) {
                                    type = ‘application/x-javascript‘
                                }
                                reslove({type: type, response: data})
                            }
                        })
                    }

                }
            })
        })
    },

上面是请求资源和文件的逻辑,接口类似。完成效果:

原文地址:https://www.cnblogs.com/mzqn/p/8885478.html

时间: 2024-08-30 13:56:40

原生nodejs编写在线聊天系统的相关文章

Linux网络编程(多人在线聊天系统)

一.首先是服务器的建立 首先是一个信号终止程序,发信号ctrl+c终止程序,而是是初始化网络通信. 创建一个描述符负责绑定服务器和监听服务器接收客户端的消息. socket()->sockaddr_in->bind->listen(准备就绪) 开始接收客户端消息.start()函数 首先是声明一个结构体用来存储客户端的消息,利用accept()函数来创建一个新的 描述符来接收,这里有阻塞效果,也即是说连接的时候只能一个一个的连. 然后是分离线程处理这个sockfd的连接. pthread

原生JS编写图片切换效果和点击按钮的样式变化

这两天更进一步的了解了JS,老师让我们用原生的js编写图片切换和改变点击按钮样式,就是让我们学会怎么去把一个问题拆分,怎么将一个大问题拆分成许多的小问题,再用函数封装起来.比如一个点击按钮,让其点击时背景色发生改变,点击另一个时,上一个按钮要变回原来本有的颜色:这个问题用jquery,一行代码就搞定,但是用原生js就得分三个部分来考虑: 1.添加改变背景的样式. 2.怎么获取到除了当前点击的按钮以外其他的兄弟节点. 3.怎么去除按钮的样式属性. 也讲了事件委托,实现了可以删除新添加的元素的功能.

nodejs 编写(添加时间戳)命令行工具 timestamp

Nodejs除了编写服务器端程序还可以编写命令行工具,如gulp.js就是Nodejs编写的. 接下来我们来实现一个添加时间戳的命令: $ timestamp action https://www.npmjs.com/package/timestamp007 1.需要用的模块: commander  模块 用途 :解析命令行参数 主页: https://tj.github.io/commander.js/ fs 模块 用途 :于对系统文件及目录进行读写操作 2.命令格式 编写命令行工具前,首先定

七天学会NodeJS (原生NodeJS 学习资料 来自淘宝技术团队)

NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情.例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象.而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS

原生js之道——原生js编写类选择器

一.类选择器的概念 类选择器,就是通过class属性获取节点.比如一个html结构中,有三个p标签都具有class="red"的属性,那么类选择器返回的就是这三个p标签. 在jquery中,我们可以很方便的通过$(".red")这种方式按照类获取节点.但是在原生的javascript中,有getElementById(按照id属性获取元素).getElementsByTagName(按照标签名获取元素)等方法,但是并没有类选择器相关方法.因此,编写原生js实现类选择

基于JAVA的简易在线聊天系统,觉得挺自豪的一个项目

项目做的比较多,最近,做的一个项目:基于JAVA的简易在线聊天系统,感觉挺自豪的. 这个项目应用JAVA编程语言实现基于网络的文本交互软件的设计和实现,达到多客户端收发文本消息的交互操作.通过服务器端多线程地监控客户端的登陆和退出,实时接收客户端发出的消息并定向发送到指定客户端,以实现在线实时文本消息传输功能:当服务器端运行时,客户端可以随时登陆和退出:客户端登陆时可以设置个人信息,包括用户名和密码:保持一定的系统稳定性,客户端与服务器端的连接稳定. 这个“基于JAVA的简易在线聊天系统”是我在

jsp开发在线聊天系统源代码下载

原文:jsp开发在线聊天系统源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463726832640.htm 这个java的聊天系统,功能简单,有具体的操作形式. 首页:http://localhost:端口/项目名称/index.jsp 聊天页 在firefox下登陆后有bug,在chrome下没问题,大家注意下. 另外缺少jar包: http://www.zuidaima.com/jar/search/jstl-1.0.1.htm http:/

canvas :原生javascript编写动态时钟

canvas :原生javascript编写动态时钟 此时针是以画布的中心为圆心: g.translate(width/2,width/2); 此函数是将画布的原点移到(width/2,width/2) 绘制表盘 function jiang(){ r = width/2 g.clearRect(0, 0, 600, 600); g.save(); g.translate(r, r); g.rotate(-Math.PI / 2); //分钟刻度线 for(var i = 0; i < 60;

原生nodejs 学习笔记1

网上许多nodejs教程或书藉都是教你调用第三方模块来编写nodejs应用的,虽然这是非常便捷的,但是封装太厚,你基本一点东西还是没有学到.人家的模块,人家想怎么改就行,可以下一版本就改了接口,你的应用就完蛋了.比如说google,他就爱干这种事情.因此我们还得老老实实学习底层API吧. 本节首先教大家跑起一个页面吧. 我在以前就写一篇相关的, node.js 一个简单的页面输出,大家可以先预习一下. 一般来说,大家都是从这样一个例子入门 var http = require("http&quo