【Node.js基础篇】(十)使用net模块和Readline模块实现Socket通

Node.js的socket通信和C++、Java的非常相像,学过这两种语言的socket通信的同学可以很快就掌握好Node.js的socket通信。下面我们以实现一个Echo服务器的服务端和客户端为目的,学习一下Node.js的socket通信。

所谓的Echo服务器指的是这样一种服务器:客户端发送一条消息给服务端,服务端就把这条消息原封不动地返回给客户端。

服务端

服务端的实现分为三步: – 通过createServer创建一个server服务端 – 使用server的listen方法监听指定端口,等待客户端接入 – 通过socket对象来监听data、close等事件,用以完成与客户端的交互

下面是服务端代码:

/** * Created by Administrator on 2015/9/8. */var net = require(‘net’);;;net.createServer(function(sock) {// 获得了一个socket连接,将客户端输出来consolesocksock.remotePort);// 为这个socket实例添加一个”data”事件处理函数sock.on(‘data’, function(data) {consolesock);// 回发该数据,客户端将收到来自服务端的数据,实现ECHO服务器sock);});// 为这个socket实例添加一个”close”事件处理函数sock.on(‘close’, function(data) {consolesocksock.remotePort);});}).listen(PORT, HOST);consoleHOST PORT);

使用createListener的时候会传入一个回调函数,,当客户端连接上服务端时调用。在回调函数里,完成了对data、close事件的监听。

data事件:当客户端有消息发送过来时触发此事件close事件:当客户端断开连接时触发此事件客户端

因为要实现的是Echo服务器,所以自然要实现输入与输出,这里,我使用了上一篇介绍的Readline模块来实现控制台的输入与输出,对这一模块不太熟悉的同学,可以先去看一下Readline模块的介绍。

与服务端相似,客户端的实现也分为三步: – 创建一个socket – 连接上指定IP指定端口号的服务端 – 监听data、close等事件完成与服务端的交互

客户端代码如下:

/** * Created by Administrator on 2015/9/8. */var net = require(‘net’);var readline = require(‘readline’);// 创建Readline接口rl = readline.createInterface(process.stdin, process.stdout);var HOST = ‘127.0.0.1’;var PORT = 7001;var client = new net.Socket();client.connect(PORT, HOST, function() {console.log(‘CONNECTED TO: ‘ + HOST + ‘:’ + PORT);// 连接建立后,开始执行命令行输入rl.setPrompt(‘Test> ‘);rl.prompt();});// 为客户端添加“data”事件处理函数// data是服务器发回的数据client.on(console.log(“”+data); rl.prompt();});// 为客户端添加“close”事件处理函数client.on(‘close’, function() {console.log(‘Connection closed’);process.exit(0);});rl.on((line.trim()) {case ‘close’:rl.close();return;}client.write(line.trim());rl.prompt();}).on(‘close’, function() {console.log(‘Good bye!’);client.end();});

这里应该注意,客户端socket监听了data和close事件、我们的输入输出模块也监听了它们自己的line、close事件,前者是client变量,后者是rl变量,要区别开来。

当我们输入close后,会发生以下过程 1. line事件里调用Readline.close()触发了Readline的close事件; 2. 在Readline的close事件里,调用client.end()结束客户端,从而触发客户端的close事件; 3. 客户端的close事件监听器里执行程序退出操作 process.exit(0).

通信结果

客户端:

服务端:

通信涉及三个过程: 1. 客户端接收用户输入信息后将发往服务端; 2. 服务端接收客户端传来信息后将原封返回给客户端; 3. 客户端接收服务端信息后将其显示出来。

这里只是简单介绍了一下Node.js的基本的用法,如果想要了解更多用法,可以看官方的API文档。

你不能左右天气,但你能转变你的心情

【Node.js基础篇】(十)使用net模块和Readline模块实现Socket通

相关文章:

你感兴趣的文章:

标签云: