网络模块(net, http)小解
net模块可用来创建TCP服务器来接收网络请求,它提供了创建客户端以及服务端的方法
服务端:
创建服务器:
net.createServer([,options], connectionListener)
option 默认值 {allowHalfOpen: false, pauseOnConnect: false}
connectionListener创建服务器时自动为connection事件添加监视器
eg:
var net = require('net');
//创建服务端对象server,为connection事件添加监视器,socket是服务端的socket对象
var server = net.createServer(function(socket) { //'connection' listener
console.log('client connected');
socket.on('end', function() {
console.log('client disconnected');
});
//传给客户端
socket.write('hello\r\n');
socket.pipe(socket);
});
//为listening事件添加监视器
server.listen(8124, function() { //'listening' listener
console.log('server bound');
});
也可以写作:
var net = require('net');
var server = net.createServer();
server.on('connection', function(socket){
console.log('client connected');
console.log(socket);
//客户端断开连接时触发
socket.on('end', function() {
console.log('client disconnected');
});
//客户端输出
socket.write('hello\r\n');
socket.pipe(socket);
})
//'listening' 事件监听器,监听端口成功时触发
server.listen(8124, function() {
console.log('server bound');
});
服务端(server)事件如下:
listening: 绑定端口
connection: 每个客户端socket连接到服务器时触发
close: 服务端关闭
error: 服务端发生异常
---------------------------------
连接事件(socket)如下:
data: 当一端调用write()发送数据时,另一端触发
end: 当连接中任意端发送了FIN数据,两端都触发
connect: 用于客户端,socket与服务端连接成功时触发
drain: 任一端调用write()时,当前这端触发
error: 异常发生
close: socket完全关闭
timeout: 当一定时间后连接不再活跃是触发,通知用户此连接以被闲置
******************************************************************************************
客户端:
创建客户端,连接服务端
net.connect(options, [, connectionListener])
options:
port 客户端连接到port的端口,必填
host 客户端连接到的主机,默认localhost
eg:
var net = require('net');
//client是一个socket对象
var client = net.connect({port: 8124},
//connect监视器
function() {
console.log('connected to server!');
client.write('world!\r\n'); //服务端的hello会在world之前输出
});
client.on('data', function(data) {
console.log(data.toString());
client.end();
});
client.on('end', function() {
console.log('disconnected from server');
});
备注: socket是一个可读可写的stream对象,Tcp协议是面向连接的
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http
创建服务器:
http.createServer([requestListener])
eg:
var http= require("http");
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
解析:
请求部分(req), 请求头信息:
req.method 请求类型
req.url url地址
req.httpVersion http协议版本
req.headers: 请求头信息里的请求头对象(headers)
类型: 只读流
响应部分(res):
res.writeHead()分为res.setHeader()与res.writeHead()两部分,两者都是定义头信息,但只有调用后者时才会写入连接
res.write(),res.end()都是定义文体部分,后者会发送信号告知服务器这次响应结束
*********************************************************************************************************
创建客户端
http.request(options, connect)
eg:
var options= {
hostname: "127.0.0.1",
port: 1334,
path: "/",
method: "GET"
};
var req= http.request(options, function(res){
console.log(res.statusCode);
console.log("HEADERS:"+ JSON.stringify(res.headers));
res.serEncoding('utf8');
res.on("data", function(chunk){
console.log(chunk);
})
});
res.end();
options包含请求头信息,包括
host: 服务器域名或IP地址,默认localhost
hostname: 服务器名称
port: 服务器端口
...
headers:请求头对象
request的write(),end()与浏览器的ajax调用几近相同
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
网络模块(net, http)小解的更多相关文章
- [原]Cachedb 网络模块文档
Cachedb 网络模块文档 整体结构 多路复用 (epoll 模块) 事件驱动 (事件封装) 缓冲管理 (上层buffer管理) 设计思想 层次化的设计,每一个模块只调用上一个模块的接口,并将耦合聚 ...
- selection伪元素小解
上一篇:<RGBA与Opacity区别小解> p{font-size:14px;} 今天说一个简单的伪元素::selection,它的用武之地仅在于改变选中文本时文本的颜色和文本背景颜色. ...
- ansible网络模块安装httplib2
ansible网络模块安装httplib2 在进行使用ansible的网络模块的时候,需要安装httplib2模块 下载地址: https://pypi.python.org/pypi?%3Aacti ...
- Poco库网络模块例子解析1-------字典查询
Poco的网络模块在Poco::Net名字空间下定义 下面是字典例子解析 #include "Poco/Net/StreamSocket.h" //流式套接字 #include ...
- libevent for qt网络模块
libevent for qt网络模块,直接替换qt的select模型,支持epoll,select,pool.使用非常简单,无需修改以前的代码结构 最近在开发im服务器,需要大并发链接.QT默认的是 ...
- 内嵌W5100的网络模块WIZ812MJ--数据手册
1.简介 WIZ812MJ是一款内嵌了W5100(TCP/IP硬件芯片,内置PHY).MAG-JACK(带变压器的RJ45)和其他胶连逻辑的网络模块.它可以当作一个组件使用,而且不需要为W5100和变 ...
- iOS网络模块优化(失败重发、缓存请求有网发送)
iOS开发中,一般都是通过AFN搭建一个简易的网络模块来进行与服务器的通信,这一模块要优化好没那么简单,需要花费很多时间与精力,仅仅根据这几年来的填坑经验,总结下这一块的需要注意的地方,也是给自己梳理 ...
- Qt 网络模块如何使用?
1.网络模块介绍 类名 说明 中文 QAbstractNetworkCache The interface for cache implementations 缓存实现的接口 QNetworkCach ...
- BASE64Decoder小解
BASE64Decoder小解 Base64 是网络上最常见的用于传输8Bit 字节代码的编码方式之一,大家可以查看RFC2045 -RFC2049 ,上面有MIME 的详细规范. Base64 要求 ...
随机推荐
- X11 五子棋
#include <X11/Xlib.h> #include <stdlib.h> #include <X11/keysym.h> #include <cst ...
- C#中的引用传递、值传递
先来说下C#中的数据类型.分值类型和引用类型两大类. 值类型:直接存储数据的值,保存在内存中 引用类型:存储对值的引用,实际上存储的就是一个内存的地址 C#预定义的简单类型,像int,float, ...
- Chapter 19_0 位操作库
位操作库是Lua5.2版本里添加的库,所有函数放在bit32 table里.(bit32只能针对32位整数运算) 在Lua5.3版本里,bit32库被废弃掉.不过可以使用一个外部兼容库,但是最好直接用 ...
- Process Monitor V2.96 (系统监视工具) 汉化免费绿色版
软件名称: Process Monitor V2.96 (系统监视工具) 汉化免费绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP ...
- S.O.L.I.D五大原则之单一职责SRP
转自 : 汤姆大叔的blog Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单 ...
- Centos6.5环境中安装vsftp服务
1.检查vsftp是否安装 命令:rpm -qa|grep vsftpd 若已经安装,则显示相关的版本信息,否则什么也没有. 也可以输入find -name "vsftpd" -p ...
- Shell学习笔记 ——第二天
1.显示日期 date | cal cal 2010 cal 2 2010 2.改变文件拥有者 chown 3.改变文件权限 chmod 4.显示当前目录 pwd 5.查看文件尾部内容,并 ...
- jquery如何获取url中问号后面的数值
假如路径是这样的:www.domain.com/list/?menu=1 var locationUrl = location.search.substring(6); switch(location ...
- Entitlements (授权机制) 延伸
授权机制 (Entitlements) 到目前为止,我们都假设所有的证书起到的作用都是一样的,并且假设如果我们有了一个有效的证书代码签名也就相应的有效.然而这当然不是唯一的规则.操作系统有许多标准来检 ...
- FOUNDATION_EXPORT 延伸
一般iOS我们定义常量的方法有两种,来看下面例子 我的.h文件 1 2 FOUNDATION_EXPORT NSString * const kMyConstantString; FOUNDATI ...