个人博客
专注IT梦想的地方

Node.js之实现套接字服务(一)

好吧,最近刚做完一个小项目,虽客户改动次数较多,但也是自己没太多时间去细细品味罢了,这不,耽误了几天node.js的学习。

大家看标题看到有个括号,说明我这是一个系列教程,一边wan一边xie,反正都是那么有Fan,那我何不跟上这似魔鬼的步伐?好吧,言归正传,打算一步步去实现一个聊天室功能,这是出于在学习套接字的时候突发奇想的,没有和其他人做过联想存粹就是无意想这么干而已。

那么废话不多说,首先,了解一下套接字,什么是套接字?

套接字是一个跨计算机网络流动的通信的端点,位于HTTP层下面并提供服务器之间的点对点通信。而且几乎所有的互联网通信都是基于在互联网上两点之间传输数据的Internet套接字;套接字使用ip地址+端口的组合方式开展工作,所以还是非常方便的一种通信方式。

在node.js中,套接字是http模块的底层结构,如果不处理get或者post请求的话,套接字是个不错的选择。

那么在node.js应用中,主要通过net模块在服务器和客户端创建套接字,并且晕他们来进行数据的写入和读取,实现Duplex流,所以还是很简单的。

首先,我们需要创建一个Socket对象,这个对象可以完美的演绎我们的套接字;那么如何创建Socket对象呢?我们通过下面三种方式来进行创建:

//第一种方法,通过一个options参数
var SocketClient = net.connect(options, [connectionListener]);
var SocketClient = net.createConnection(options, [connectionListener]);

//第二种方法,通过接受port和host值作为直接的参数
var SocketClient = net.connect(port, [host], [connectionListener]);
var SocketClient = net.createConnection(port, [host], [connectionListener]);

//第三种方法,通过接受指定文件系统位置的path参数,这个位置是一个Unix套接字在创建Socket对象时使用的。
var SocketClient = net.connect(path, [connectionListener]);
var SocketClient = net.createConnection(path, [connectionListener]);

无论你使用哪种,都将返回一个Socket对象,唯一的区别在于接受的第一个参数,而最后一个参数都是当连接对服务器打开时执行的回调函数。而无论你使用net.connect还是net.createConncetion,它们的工作方式是完全相同的。

那么至于第一个参数,指定的选项为:

port:客户端应连接到的端口。此选项是必需的。

host:客户端应该连接到的服务器的域名或IP地址。默认为localhost

localAddress:客户端应该绑定的用于网络连接的本地IP地址。

allowHalfOpen:一个布尔值,如果为true,则表示当套接字的另一端发送一个FIN数据包时,该套接字将不会自动发送一个FIN数据包,从而使Duplex流的一半保持开放。默认为false

 

一旦Socket对象被创建,它就提供了在连接到服务器的生命周期中发出的几个事件,如下:

connect:成功建立与服务器的连接时发出。回调函数不接受任何参数

data:在套接字上收到数据时发出。如果没有数据时间处理程序被连接,那么数据可能会丢失。回调函数必须接受一个buffer对象作为参数,它包含从套接字读取的数据的块。

end:当服务器通过发送一个FIN终止连接时发出。回调函数不接受任何参数

timeout:由于不活动,因此到服务器的连接超时时发出。

drain:当写缓冲区变为空时发出。你可以使用此事件截回被写入套接字中的数据流。回调函数不接受任何参数

error:在套接字连接上发生错误时发出。回调函数应该接受错误的唯一参数。

close:套接字已完全关闭时发出,它可能是由一个end()方法关闭的,或者因为发生错误而关闭。回调函数不接受任何参数

所以大家可以看到大概的一个入口知识点,那么今天暂时分享这里,后续继续。

赞(0) 打赏
未经允许,不得转载本站任何文章:智言个人博客 » Node.js之实现套接字服务(一)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏