[node.js 学习]1.start a simple server
1.启动一个本地的服务
下面是官方的例子,会生成一个随机端口,返回的是纯文本:
var net = require('net');
var server = net.createServer((socket) => {
socket.end('goodbye\n');
}).on('error', (err) => {
// 处理错误
throw err;
}); // 随机端口
server.listen(() => {
console.log('opened server on', server.address());
});
指定一个端口:
server.listen({
port: 80
},() => {
console.log('opened server on', server.address());
});
但是这时却报错了:Error: listen EACCES 0.0.0.0:80。
EACCES 表示的是 E|ACCES,即 acces error 访问错误,一般指没有权限,因为 0 ~ 1023 端口是公认端口,其对应的服务都是指定/默认的,需要权限去访问。
于是就需要使用管理员权限执行该命令:sudo node main.js。但是又出现问题了:Error: listen EADDRINUSE :::80。网上查了下查看端口的命令:lsof -i tcp:80,但是显示的列表里却找不到80端口对应的进程,是不是看漏了?执行一下 lsof -i | grep ':80',还是没有。再查下,原来 mac 有启动默认的 apache 服务,关掉 sudo apachectl stop。再执行 node 就成功了。
2. 返回文件.html
引入文件模块 var fs = require('fs'),使用异步读取文件的方法 fs.readFile:
var server = net.createServer(socket => {
fs.readFile('../html/index.html', {
encoding: 'utf-8'
}, (err, data) => {
socket.end(data);
});
})
fs.readFile 是异步的,所以不能用它返回的值(undefined),可以用 fs.readFileSync
var server = net.createServer(socket => {
var data = fs.readFile('../html/index.html', {
encoding: 'utf-8'
});
socket.end(data);
}).on('error', (err) => { throw err; });
一个最简单的本地服务器就这样完成了。注意:这是 tcp 服务器,不是 http 服务器,浏览器之所以能访问是因为 http 是建立在 tcp 之上的。
3.简单的 tcp 聊天室
let net = require('net');
// 保存连接 server 的 socket
let sockets = [];
let server = net.createServer((socket) => {
sockets.push(socket);
socket.on('data', (data) => {
sockets.forEach((e) => {
// 排除本身,转发给其他 socket
if(e != socket) {
e.write(data);
}
});
}); // 连接断开的时候从 sockets 里删除,避免错误
socket.on('end', function () {
let index = sockets.indexOf(socket);
sockets.splice(index, 1);
});
}).on('error', (err) => {
// 处理错误
throw err;
}); // 指定 8088 端口
server.listen(8088, () => {
console.log('opened server on', server.address());
});
运行本示例,再使用 telnet 127.0.0.1 8088 连接,就能看到效果了。
参考
2.node_Net
[node.js 学习]1.start a simple server的更多相关文章
- Node.js学习笔记(一)基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- Node.js学习之TCP/IP数据通讯
Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- Node.JS学习——学习笔记
Node.JS--学习笔记 2020年02月23日11:52:01 我打算自学NodeJS-通过阅读NodeJS官网来完成. https://nodejs.org/dist/latest-v13.x/ ...
- NODE.JS学习的常见误区及四大名著
NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...
- Node.js学习系列总索引
Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...
- 【入门必备】最佳的 Node.js 学习教程和资料书籍
Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...
- node.js学习(1)
新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...
- 我的Node.js学习历程
学习一门技术,每个人都有每个人的方法.我的方法很简单,做项目. 基本概念 在搭建一个node网站之前,还是要掌握一些基本的概念的,这里列举一下,具体的内容大家自己到网上去查: npm bower ex ...
随机推荐
- PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- 从ASP.NET 升级到ASP.NET5(RC1) - 翻译
前言 ASP.NET 5 是一次令人惊叹的对于ASP.NET的创新革命. 他将构建目标瞄准了 .NET Core CLR, 同时ASP.NET又是对于云服务进行优化,并且是跨平台的框架.很多文章已经称 ...
- Yii2.X 多语言-类图
- html中role的作用
role 是增强语义性,当现有的HTML标签不能充分表达语义性的时候,就可以借助role来说明. 通常这种情况出现在一些自定义的组件上,这样可增强组件的可访问性.可用性和可交互性. role的作用是描 ...
- 在网站开发中很有用的8个 jQuery 效果【附源码】
jQuery 作为最优秀 JavaScript 库之一,改变了很多人编写 JavaScript 的方式.它简化了 HTML 文档遍历,事件处理,动画和 Ajax 交互,而且有成千上万的成熟 jQuer ...
- 错误:当你使用id作为sharepoint的自定义页面的查询参数时,总会提示项目不存在!
No item exists at http://SERVER/SITE/mypage.aspx?ID=1. It may have been deleted or renamed by anothe ...
- React Native class 后面的命名首字母需要大写
React Native class 后面的命名首字母需要大写 否则会报Expeted a component class,got [object Object].
- Visual Studio2015 常用快捷键
项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添加 ...
- Jsp的九个内置对象
一.什么是内置对象?在jsp开发中,会频繁使用到一些对象.例如HttSession,ServletContext,HttpServletRequest.如果我们每次要使用这些对象都去创建这些对象,就会 ...