21

TCP服务器的单进程、多进程实现

一、socket编程

在理解TCP服务器时,我们必须了解socket编程,在上篇博客中,我们知道在TCP/IP协议中,“IP地址+TCP端口号/UDP端口号”唯一标识网络通讯中的唯一一个进程,我们把“IP地址+端口号”就成为socket。

在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成 的socketpair就唯一标识一个连接。socket本身有“插座”的意思,因此用来描述网络连接的一对一关系。

二、socket地址数据类型及相关函数

IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址⽤sockaddr_in结构体表⽰,包括16位端口号和32位IP地址,IPv6地址⽤sockaddr_in6结构体表⽰,包括16位端口号、 128位IP地址和⼀些控制字段。
socket API是一层抽象的⽹网络编程接口,适⽤用于各种底层⽹网络协议,如IPv4、IPv6,以及UNIX Domain Socket。然⽽,各种网络协议的地址格式并不相同,如下图所示: Continue reading

20

NodeJS项目使用AVA模块做自动化测试

目录

1、为什么选择 AVA ?
2、API 概览。
3、准备工作。
4、单元测试,测试一个简单的工具函数。
5、使用 Promise、Async/await、Observable 。
6、使用 JSDOM 模拟浏览器环境。
7、单元测试,测试一个简单的 React 组件。
8、Http 接口测试,GitHub 用户信息接口测试。
9、串行测试。
10、快照断言。
11、覆盖率报告:nyc + Coveralls 。
12、持续集成:CircleCI 。
13、学习借鉴,一些使用 AVA 做测试的开源项目。
14、e2e测试框架推荐:TestCafe 。
15、参考。 Continue reading

20

nodejs中的TCP(net模块)的简单应用

TCP(Transimision Control Protocal)是一种可靠的、面向连接的协议,传输效率低。

OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

上面是基本网络模型的组成,再来看一下tcp/ip的参考模型

TCP/IP是传输控制协议/网络互联协议的简称。早期的TCP/IP模型是一个四层结构,从下往上依次是网络接口层、互联网层、传输层和应用层。后来在使用过程中,借鉴OSI七层参考模型,将网络接口层划分为了物理层和数据链路层,形成五层结构。

我们看到了tcp/ip网络模型把osi中的应用层、表示层、会话层合并成了应用层。
Tcp协议实际上是在传输层。传输层是面向连接的、可靠的的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双向传播。TCP将若干个字节构成一个分组,此分组称为报文段(Segment)。提供了一种端到端的连接。 传输层的协议主要是TCP 。 Continue reading

16

npm 和 cnpm

npm
  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用
npm命令
  • npm -v 来测试是否成功安装
  • 查看当前目录已安装插件:npm list
  • 更新全部插件: npm update [ --save-dev ]
  • 使用 npm 更新对应插件: npm update <name> [ -g ] [ --save-dev]
  • 使用 npm 卸载插件: npm uninstall <name> [ -g ] [ --save-dev ] Continue reading
15

http请求怎样实现TCP长连接、短连接

HTTP连接分为长连接和短连接,而我们现在常用的都是HTTP1.1,因此我们用的都是长连接。

这句话其实只对了一半,我们现如今的HTTP协议,大部分都是1.1的,因此我们平时用的基本上都是长连接。但是前半句是不对的,HTTP协议根本没有长短连接这一说,也正因为误解了这个,导致对于长连接一直不明不白,始终不得其要领,具体下面一段会说到。

网络上很多文章都是误人子弟,根本没有说明白这个概念。这里要强调一下,HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,或者更准确的说,是本次HTTP请求就结束了,根本没有长连接这一说。那么自然也就没有短连接这一说了。

之所以网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。

其实知道了以后,会觉得这很好理解。HTTP协议说到底是应用层的协议,而TCP才是真正的传输层协议,只有负责传输的这一层才需要建立连接。 Continue reading

14

Emacs编辑器的安装和简单使用方法

国际化


Emacs支持对多种文字的文本编辑,包括UTF-8在内的诸多编码系统,加上对多种字符集、文稿、书写系统,以及不同文化的书写习惯都提供了支持,使得世界上大多数语言的使用者都能通过Emacs进行文本处理。

Emacs还能通过调用诸如ispell这样的外部程序,实现多种语言的拼写检查。

跨平台性


Emacs是目前世界上最具可移植性的重要软件之一,能够在当前大多数操作系统上运行,包括类Unix系统(GNU/Linux、各种BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等,还有移动Android平台以及iOS。 Continue reading

13

Node.js HTTP 服务器与客户端

Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的 HTTP 客户端。http.Server 是一个基于事件的 HTTP 服务器,它的核心由 Node.js 下层 C++ 部分实现,而接口由 JavaScript 封装,兼顾了高性能与简易性。http.request 则是一个 HTTP 客户端工具,用于向 HTTP 服务器发起请求,例如实现 Pingback(Pingback 是博客系统中用来通知文章被他人引用的一种手段,例如 WordPress 会自动解析文章中的链接,发送 Pingback 以告知链接被引用。 )或者内容抓取。 Continue reading

07

普通人会将BitcoinCash与Bitcoin弄混吗?

据Ambcrypto消息,“比特币耶稣”Roger Ver于莱特币创始人李启威(Charlie Lee)就其未能将比特币现金视为真正的比特币的原因进行了辩论。在辩论中,李启威表示自己不喜欢“Bitcoin Cash”这个名字,他认为Bitcoin Cash这一术语很容易在社区内产生混淆和歧义,因为用户很容易将Bitcoin和Bitcoin Cash混淆。

李启威在解释自己不喜欢的原因时举了一个例子:如果一个商人表示自己商店的任何商品都可以用比特币来购买,你认为比特币现金就是比特币,所以你用比特币现金付款,商家无法接受它,因为商家只接受比特币,而且这还不好沟通。李启威进一步补充说,由于会产生混淆,所以社区成员建议将“Bitcoin Cash”改为“Bcash”。 Continue reading

07

抢火车票程序-其实只是个监听+提醒的定时任务实现

用node写一个爬虫,每过一分钟就爬取12306,查询某一辆火车是否还有余票,有余票就给我发一封邮件,提醒我有余票了,然后我立马登录12306改签。抢票系统。

这个思路的有两点前提,第一、要自己提前确定好想买哪一辆火车,包括:火车车次,日期。第二、自己要经常在电脑前,只要一来邮件就去12306买票,这对于程序猿来说已经满足了。

代码实现

要想实现我的想法,运用到了2个node库:nodemailernode-schedule,分别实现邮件和定时执行功能。

因为12306是https协议的,所以node的http模块还是不行,这里可以用node的https模块。

当然12306还需要有浏览器证书,我代码里已经有了,大家下下来就可以用。 Continue reading

07

比特币开发原理浅析

随着勒索病毒的爆发,比特币更是近一步的被人们接触,机缘巧合之下,从大四开始接触比特币钱包的后台开发,我只做简单的介绍。

  • 比特币终端是一个跨平台的软件,运行在windows ,linux ,移动设备上,本文以Windows平台为例。
  • 服务器:windows 2012 server . Bitcoin Core . 由于同步钱包需要很多时间,并且现在同步容量应该在200G内(我最近一次是160g).
  • 先上图
v2-037efcc0b96b7f324c79775e011c3a44_hd
  • 你的钱包只是在官网上下载的一个客户端,每个钱包可以生成N个钱包地址,从别的钱包转账可以转到这N个地址中的一个,你最先收到钱包转账的通知,也就是确认数为1,但是这个时候区块链还没有发出确认通知,当确认数>=2的时候可以认为转账成功了。 Continue reading