NodeJs之安装和Socket使用
Node.js是一个基于Chrome V8引擎的JavaScript运行环境。它使用了一个事件驱动、非阻塞式I/O的模型。
Node是一个让JavaScript运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。
NodeJs的安装
- 方法一
1 | curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - |
- 方法二
-
下载压缩包
wget https://nodejs.org/dist/v8.1.0/node-v8.1.0-linux-x64.tar.xz -
解压
tar -xvf node-v8.1.0-linux-x64.tar.xz -
切换并查看当前node所在路径
cd node-v8.1.0-linux-x64/bin
pwd -
查看node版本
./node -v -
将node和npm设置为全局
sudo ln /home/ubuntu/node-v8.1.0-linux-x64/bin/node /usr/local/bin/node
sudo ln /home/ubuntu/node-v8.1.0-linux-x64/bin/npm /usr/local/bin/npm
pwd
推荐使用方法一,直接安装在系统环境/usr/bin目录下,之后使用npm -g安装其他插件也会安装到/usr/lib/node_modules’(需要使用sudo权限)‘。如果使用方法二,将nodejs路径链接到/usr/local/bin目录下,则每次npm-g安装插件都会安装在nodejs原路径下的node_modules(比如/home/ubuntu/node-v8.1.0-linux-x64/lib/node_modules),每次代码中引用插件也需要到此目录下去找。
NodeJs下的Socket
websocket
WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。
- 打开websocket
1 | var Socket = new WebSocket(url,[protocol]); |
- WebSocket事件
我们使用了以上代码创建了Socket对象:
1 | 事件 事件处理程序 描述 |
- WebSocket 方法
1 | 方法 描述 |
socketio
Socket.io实际上是WebSocket的父集,Socket.io封装了WebSocket和轮询等方法,会根据情况选择方法来进行通讯。
利用websocket做一个简易聊天室
-
下载Visual Studio Code
Visual Studio Code由微软出品,但它不是那个大块头的Visual Studio,它是一个精简版的迷你Visual Studio,并且,Visual Studio Code可以跨平台!Windows、Mac和Linux通用。
点击官网下载
-
使用Visual Studio Code
- 新建一个目录websocket,在终端进入此目录,然后建立一个websocket依赖。
1
2$ npm -i nodejs-websocket --save
此文件夹就会自动生成node-modules文件夹和package-lock.json-
在websocket目录下,新建服务端app.js
-
在websocket目录下,新建公共文件夹public,然后在此文件夹中新建一个index.html作为聊天的页面
-
本来要写客户端client.js,不过此js可以直接写在index.html里。
点击详细代码,查看源码。
利用socketio做一个简易聊天室
- 新建一个目录socketio,在终端进入此目录,然后生成信息,建立一些依赖。
1 | $ npm init 或者使用 $ npm init -y 忽略以下,直接生成。 |
1 | 建立express、socketio依赖。 |
- 语法
1 | var app = require('express')(); |
1 | var server = require('http').Server(app); |
1 | var io = require('socket.io')(server); |
1 | server.listen(3000); |
- 引入一些样式
1 | <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> |
点击详细代码,查看源码。
拓展
-
let,const,var三个定义变量之间的区别
- var
1
2
3
4
5
6for (var i = 0; i < 10; i++) {
console.log(i);
}
alert(i)
在javascript中没有块级作用域,在for()里面定义变量i ,在循环外部依然可以进行正常访问。1
2
3
4
5var i = 15;
var i = 5;
alert(i);//5
其中变量i重复定义没有报错,反而输出值为5,说明被复写了。1
2
3
4
5
6
7for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i)
}, 1000);
}
输出结果为3,3,3,因为当循环结束时,i的值为三。所以在执行setTimeout函数时会打印三次3。- let
它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,声明的常量,不可重复声明。。
1
2
3
4
5
6
7
8
9
10
11
12
13{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
或者
for (let i = 0; i < 10; i++) {
// ...
}
console.log(i); // ReferenceError: i is not defined1
2
3
4
5
6
7
8使用var命令,变量可以在声明之前使用,值为undefined。let命令改变了这个语法,它所声明的变量一定要在声明后使用,否则报错。
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;- const
const声明一个只读的常量。一旦声明,常量的值就不能改变。
对于const来说,只声明不赋值,就会报错。const的作用域与let命令相同:只在声明所在的块级作用域内有效。
const声明的常量,也与let一样不可重复声明。