[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 ...
随机推荐
- asp.net DataTable导出Excel 自定义列名
1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ...
- perl 如何匹配ASCII码以及ASCII码转换
匹配ASCII码: /[:ascii:]/ ASCII码转换为数字: ord() 数字转换为ASCII码: chr()
- 分布式文件系统 - FastDFS 简单了解一下
别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之四:流程优化之信息安全与订单校验
有了前文几个步骤的分析和设计,TYPESDK的信息交互流程已经可以正常工作了,但是,这个流程还没有考虑到支付这样的过程中,至关重要的信息安全问题. 在整个交互过程中,游戏服务端,SDK服务端,渠道服务 ...
- Ext JS 如何动态加载JavaScript创建窗体
JavaScript不需要编译即可运行,这让JavaScript构建的应用程序可以变得很灵活.我们可以根据需要动态从服务器加载JavaScript脚本来创建和控制UI来与用户交互.下面结合Ext JS ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- iOS开发--面试
今天一大清早去面试, 公司距离我家还挺近的, 花了一个小时走着去, 也顺路印下简历, 理理思路, 到了公司面试官什么的都不错, 还给我讲了很多知识, 收货也是满满的, 总结下今天都遇到了哪些问题, 调 ...
- 两listview联动
package com.mttz; import java.util.ArrayList;import java.util.List; import com.mttz.adapter.CaiDanAD ...
- 在output 子句和 scope_identity() 混合使用的时候的注意事项
无意睹到一篇旧文档 SR0008:考虑使用 SCOPE_IDENTITY 代替 @@IDENTITY :https://msdn.microsoft.com/zh-cn/library/dd17212 ...
- js判断用户是否正在滚动滚动条,滚动条滚动是否停止
js智能判断是否可以自动滚动 比如,做一个音乐播放器,边播放,边定位歌词,播放的时候,需要自动定位到播放语句,但是用户去拖动或者滚动div(歌词面板)时,这时就必须停止自动滚动,或者说是不能自动滚动, ...