Nodejs创建TCP服务器 - king0222_服务器其它

1.Nodejs提供了net模块给我们,所以我们创建TCP服务器很简单:

 require('net').createServer(function(socket) {
   // new connection
   socket.on('data', function(data) {
     // got data
   });
   socket.on('end', function(data) {
     // connection closed
   });
   socket.write('Some string');
 }).listen();

通过var server = require('net').createServer();这行代码我们可以得到tcp服务器对象的引用。

server对象具注册了以下几个监听事件:

listening,connection,close,error

下面一个例子是在TCP服务器的声明周期中监听了如上几个事件:

var server = require('net').createServer();
 var port = ;
 server.on('listening', function() {
   console.log('Server is listening on port', port);
 });
 server.on('connection', function(socket) {
   console.log('Server has a new connection');
   socket.end();
   server.close();
 });
 server.on('close', function() {
   console.log('Server is now closed');
 });
 server.on('error', function(err) {
   console.log('Error occurred:', err.message);
 });
 server.listen(port);

一旦建立连接成功后,会得到一个socket对象作为回调中的参数,我们可以操作这个socket对象,前面提到过tcp连接的对象是可读可写的流。作为一个流对象,因此能够监听data,end等事件;作为一个可写流,具有write()方法。 下面是一个能够监听用户输入的例子:

 var server = require('net').createServer(function(socket) {
   console.log('new connection');
   socket.setEncoding('utf');
   socket.write("Hello! You can start typing. Type 'quit' to exit.\n");
   socket.on('data', function(data) {
     console.log('got:', data.toString())
     if (data.trim().toLowerCase() === 'quit') {
       socket.write('Bye bye!');
       return socket.end();
     }
     //反馈回客户端
     socket.write(data);
   });
   socket.on('end', function() {
     console.log('Client connection ended');
   });
 }).listen();

因为socket对象又是一个可读的流,因此你能够空气他的pause()和resume(),或者你可以直接使用pipe()方法输出一个可写流:

 var ws = require('fs').createWriteStream('helloworld.txt');
 require('net').createServer(function(socket) {
   socket.pipe(ws);
 }).listen();

上面的代码创建了一个可写流对象,然后将这个可写流对象输出到客户端。在客户端可以得到一个名为helloworld.txt的文件,

可以用“telnet localhost 4001”来测试该例子。

因为socket对象同时具有可读流的性质和可写流的性质,因此上面的例子你可以反过来形成下面这样的代码:

 require('net').createServer(function(socket) {
   var rs = require('fs').createReadStream('hello.txt');
   rs.pipe(socket);
 }).listen();

上面的代码将hello.text文件内容输出到socket对象中返回给客户端,当内容输出完成后,tcp连接就会退出,在前面的文章中有说过Pipe的用法,默认情况下在数据读取完成后就会执行end方法,因此如果不想要这样的效果并保持连接的话可以在pipe中添加第二个参数:{ end : false },并重写end监听。

2.闲置socket 当有闲置的socket出现的时候我们需要进行相应的清除的工作,由setTimeout方法可以帮我们把闲置的socket对象关闭。

 var timeout = ; // minute
 socket.setTimeout(timeout);
 socket.on('timeout', function() {
   socket.write('idle timeout, disconnecting, bye!');
   socket.end();
 });

下面是一个更简洁的使用方式:

 socket.setTimeout(60000, function() {
   socket.end('idle timeout, disconnecting, bye!');
 });

3.保持连接

复制代码 代码如下:

socket.setKeepAlive(true);

你也可以添加第二个参数在设置可延时时长:

复制代码 代码如下:

socket.setKeepAlive(true, 10000); // 10 seconds

4.是否使用延时

kernel会在发送tcp数据包之前缓存数据,因此会占据一定的延时,这对于某些小数据包场景来说是有用的,但如果你不希望有这样的延时的话,那么你可以这样设置:

复制代码 代码如下:

socket.setNoDelay(true);

 var port = ;
 var host = '...';
 server.listen(port, host);

listen方法的第二个参数是监听客户端的ip地址,如果填写则只监听所填写的ip,否则则监听所有ip地址,默认情况下不填写。 关闭服务器连接,我们可以使用close方法,同时也可以对该事件进行监听。

复制代码 代码如下:

 server.close();
 server.on('close', function() {
     console.log('server closed!');
 });

6.创建一个简单的TCP聊天室服务器

var net = require('net');
 var server = net.createServer();
 var sockets = [];
 server.on('connection', function(socket) {
   console.log('got a new connection');
   sockets.push(socket);
   console.log('sockets length:', sockets.length);
   socket.on('data', function(data) {
     console.log('got data:', data.toString());
     sockets.forEach(function(otherSocket) {
       if (otherSocket !== socket) {
         otherSocket.write(data);
       }
     });
   });
   socket.on('close', function() {
     console.log('connection closed');
     var index = sockets.indexOf(socket);
     sockets.splice(index, );
     console.log('sockets length:', sockets.length);
   });
 });
 server.on('error', function(err) {
   console.log('Server error:', err.message);
 });
 server.on('close', function() {
   console.log('Server closed');
 });
 server.listen();

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nodejs创建服务器
, nodejs服务器
nodejs_tcp服务器
nodejs tcp服务器、nodejs创建tcp服务器、nodejs 搭建tcp服务器、nodejs tcp server、nodejs tcp,以便于您获取更多的相关知识。

时间: 2024-09-20 14:58:52

Nodejs创建TCP服务器 - king0222_服务器其它的相关文章

nodejs创建服务器,要实现前端发送过来一个数据,服务执行相应的js文件,怎么实现?

问题描述 nodejs创建服务器,要实现前端发送过来一个数据,服务执行相应的js文件,怎么实现? nodejs创建服务器,要实现前端发送过来一个数据,服务执行相应的js文件,怎么实现?

socket-套接字编程,使用TCP协议编写服务器程序——绑定错误10038

问题描述 套接字编程,使用TCP协议编写服务器程序--绑定错误10038 不明白为什么会发生这个错误,求大神指点!具体代码如下 #pragma comment(lib,"ws2_32.lib")//第二版本32位的把lib文件添加到项目中windows套接字的动态链接库 #include<stdio.h> #include<stdlib.h> #include<WinSock2.h> void main(void) { WSADATA wsaData

基于TCP的客户端服务器通信,如何在终端输入数据进行聊天呢,求大神帮我

问题描述 基于TCP的客户端服务器通信,如何在终端输入数据进行聊天呢,求大神帮我 //clientTcp.c #include #include #include #include #include #include #include #include #define SERVPORT 3333 //侦听端口地址 #define MAXDATASIZE 100 main(int argc,char argv[]) { int sockfd,sendbytes; char buf[MAXDATAS

Windows 2000 创建Web和FTP服务器

创建Web和FTP服务器是创建Internet信息服务器的最重要的内容,通过Web服务器,用户可以有效直观的将企业信息发布给企业内部用户和Internet远程用户:通过FTP服务器,可实现服务器和客户机之间的快速文件传输. IIS安装好之后,会自动创建一个默认的Web站点和一个默认的FTP站点,供用户快速发布内容.用户也可自己创建Web站点和FTP站点,以扩大和丰富自己的Web服务器和FTP服务器上的信息.对于Web服务器来说,还可利用服务器扩展功能来增强Web站点的功能. 设置主目录 主目录是

创建企业级Internet邮件服务器(7)

创建|服务器|邮件服务器 1.首先,在2家公司的DNS服务器上添加DNS记录.在apple.com的DNS服务器上添加: mail  IN A 202.110.66.22   @IN MX mail 在banana.com的DNS服务器上添加类似的记录: mail IN A 202.110.66.22 @IN MX mail 2.在安装了Exchange Server的邮件服务器上,打开域用户管理器,添加2个账户appleweb和bananaweb. 3.进入Exchange管理器,修改Inte

Java网络协议 TCP和客户端/服务器范型

服务器|客户端|网络 在网络编程中(同样在其它形式的通讯中,例如数据库编程),使用套接字的应用程序也被分为两类--客户端程序和服务器程序.你可能对"客户端/服务器编程"术语比较熟悉,尽管这个术语的准确意思你不一定清楚.下面的范例就是讨论这个主题. 1. 客户端/服务器范型 客户端/服务器范型把软件分为两类--客户端程序和服务器程序.客户端软件启动一个连接并发送请求,而服务器软件监听连接并处理请求.在UDP编程环境中,没有建立实际的连接,并且UDP应用程序可以在相同的套接字上建立并接收请

多线程-采用tcp实现聊天服务器和客户端

问题描述 采用tcp实现聊天服务器和客户端 采用tcp实现聊天服务器和客户端,客户端从命令行输入聊信息,服务器收到聊天信息发送给所有连接到此服务器的客户端. 要求: 此服务器端口号为:8888, 聊天信息格式为:消息头(4字节,标示后续消息体聊天信息的长度) + 消息体(聊天信息) 支持100个客户端的连接和发送接收操作. //多线程 客户端输入exit就断开连接并退出程序 服务器要能响应客户端的主动断开请求 解决方案 用socket可以实现,具体怎么用可以去百度,一堆dome 解决方案二: 请

创建绿色数据中心 服务器节能产品先行

本文讲的是创建绿色数据中心 服务器节能产品先行,[IT168 资讯]现在,绿色的潮流随处可见.这是有充分理由的:能源价格正在上涨,这种状况令数据中心经理震撼并且促使他们寻找一些用较少的电源取得同样高的结果的方法.如果你知道为什么你要让服务器使用较少的电源和如何这样做,实现这个目标并不是很困难.  为什么应该努力使服务器使用较少的电源? 数据中心是最大的能源消费者之一,服务器就安装在数据中心.服务器和冷却设备是数据中心消耗能源的主要设备.据<数据中心杂志>在2008年6 月13日发表的"

SQLSERVER简单创建DBLINK操作远程服务器数据库的方法_MsSql

本文实例讲述了SQLSERVER简单创建DBLINK操作远程服务器数据库的方法.分享给大家供大家参考,具体如下: --配置SQLSERVER数据库的DBLINK exec sp_addlinkedserver @server='WAS_SMS',@srvproduct='',@provider='SQLOLEDB',@datasrc='10.131.20.100' exec sp_addlinkedsrvlogin 'WAS_SMS','false', NULL,'CustomSMS','Sql