Node.js开发之套接字(socket)编程入门示例

本文实例讲述了Node.js套接字(socket)编程。分享给大家供大家参考,具体如下:

Node.js的net模块提供了socket编程接口,方便我们利用较为底层的套接字接口来实现应用协议。这次我们看一个简单的回显服务器示例,包括服务端和客户端的代码。

代码

分服务器和客户端两部分来说吧。

server代码分析

server.js:

var net = require("net");
// server is an instance of net.Server
// sock is an instance of net.Socket
var server = net.createServer(function(sock){
 console.log('client connected, address - ', sock.remoteAddress, ' port - ', sock.remotePort);
 sock.setEncoding('utf8');
 sock.on('data', function(data){
  console.log('got data from client - ', data);
  sock.write(data);
 });
 sock.on('end', function(){
  console.log('client disconnected');
 });
 sock.on('error', function(err){
  console.log('socket error - ', err);
 });
});
server.maxConnections = 10;
server.listen(7, function(){
 console.log('echo server bound at port - 7');
});

使用net.createServer来创建一个服务器实例,这个方法的返回值是一个net.Server实例,net.Server提供了listen方法,让我们监听到某个端口上来接受客户端连接,同时还提供了一些属性,比如maxConnections可以设置服务器的并发连接数上限(当服务器的连接数超过这个值时,后续连接就会被拒掉),还有其它的,看文档吧:https://nodejs.org/api/net.html#net_class_net_server。

net.Server还提供了一些事件,比如error、connection等。当有客户端连接被接受时,会发射connection事件,这个事件带一个net.Socket对象作为参数,可以在回调函数里访问这个net.Socket实例来与客户端交互。我在代码里,给createServer方法传入了一个callback来处理connection事件,实际上也可以略作修改,通过监听connection事件的方法处理客户端连接。新代码如下:

var net = require("net");
var server = net.createServer();
server.on('connection', function(sock){
 console.log('client connected, address - ', sock.remoteAddress, ' port - ', sock.remotePort);
 sock.setEncoding('utf8');
 sock.on('data', function(data){
  console.log('got data from client - ', data);
  sock.write(data);
 });
 sock.on('end', function(){
  console.log('client disconnected');
 });
 sock.on('error', function(err){
  console.log('socket error - ', err);
 });
});
server.maxConnections = 10;
server.listen(7, function(){
 console.log('echo server bound at port - 7');
});

效果是一样的。

net.Socket对象有一些方法,比如write可以写数据。还有一些事件,比如error、end、data等,看代码就能明白用法。还有一些属性,比如remoteAddress、remotePort。

client代码分析

client.js:

var net = require("net");
var readline = require('readline');
console.log('type "exit" or "quit" to quit.');
// sock is an instance of net.Socket
var sock = net.connect({port: 7}, function(){
 console.log('server connected');
 sock.setEncoding('utf8');
 sock.write('Hello Echo Server\r\n');
});
sock.on('data', function(data){
 console.log('got data from server - ', data);
});
sock.on('end', function(){
 console.log('client disconnected');
});
sock.on('error', function(err){
 console.log('socket error - ', err);
});
sock.on('close', function(){
 console.log('echo client was closed');
 process.exit(0);
});
var rl = readline.createInterface({
 input: process.stdin
});
function quitEcho(){
 rl.close();
 sock.end();
 console.log('quit echo client');
}
rl.on('line', function(cmd){
 if(cmd.indexOf('quit') == 0 || cmd.indexOf('exit') == 0){
  quitEcho();
 }else{
  sock.write(cmd + '\r\n');
 }
});
rl.on('SIGINT', quitEcho);

调用readline模块来从标准输入读取数据来发送给客户端。readline的文档在这里:https://nodejs.org/api/readline.html。正如它的名字,Readline可以让你一行一行的读取一个流。比较常见的就是读取标准输入流。Readline有一些事件,我们用到的“line”事件,在一行数据就绪时会发射,带一个代表数据的参数。监听line事件,在回调中调用net.Socket的write方法写入数据。当你在控制台输入“quit”或“exit”时,调用quitEcho退出。

net.connect方法可以连接到指定的服务器,它的原型如下:

net.connect(options[, connectionListener])

第一个参数是Object,用于指定和连接相关的选项,比如服务端的host、port等,如果不指定host,就默认用localhost作为服务端主机名.

net.connect返回net.Socket对象,一旦拿到了Socket实例,就可以用net.Socket来为所欲为了。监听了data事件来接收服务端发挥的数据,监听close事件来退出进程。net.Socket的具体API,参考https://nodejs.org/api/net.html#net_class_net_socket

希望本文所述对大家node.js程序设计有所帮助。

(0)

相关推荐

  • nodejs结合Socket.IO实现的即时通讯功能详解

    本文实例讲述了nodejs结合Socket.IO实现的即时通讯功能.分享给大家供大家参考,具体如下: 动态web 在html5以前,web的设计上并没有考虑过动态,他一直是围绕着文档设计的,我们看以前比较老的网站,基本上都是某一刻用来显示单一的文档的,用户请求一次web页面,获取一个页面,但是随着时间的推移,人们想要web做更多的事情了,而不是简单的要显示文档,而javaScript一直处于开发人员推动web页面功能的发展中心. Ajax无疑是动态Web页面的一个重大发展,他不再需要我们即使更新

  • node.js中的Socket.IO使用实例

    1. 简介 首先是Socket.IO的官方网站:http://socket.io 官网非常简洁,甚至没有API文档,只有一个简单的"How to use"可以参考.因为Socket.IO就跟官网一样简洁好用易上手. 那么Socket.IO到底是什么呢?Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用.它会自动根据浏览器从WebSocket.AJAX长轮询.Iframe流等等各种方式中选择最

  • 基于socket.io和node.js搭建即时通信系统

    使用socket.io和nodejs搭建websocket服务器端 socket.io不仅可以搭建客户端的websocket服务,而且支持nodejs服务器端的websocket. 下面让我来介绍一下怎么安装配置nodejs. 进入http://nodejs.org/#download下载msi文件.一直点next安装.最后文件会自动安装在C:\nodejs目录下. 安装完成后,会自动配置环境环境变量.如果没有自动配置,自己手动在path处加上 ;C:\nodejs\. 安装完成后,需要配置np

  • nodejs socket服务端和客户端简单通信功能

    本文实例讲述了通过node.js的net模块实现nodejs socket服务端和客户端简单通信功能,可以用作客户端对服务端的端口监听以及事件回执. server端代码 var net = require('net'); //模块引入 var listenPort = 8080;//监听端口 var server = net.createServer(function(socket){ // 创建socket服务端 console.log('connect: ' + socket.remoteA

  • 用nodejs搭建websocket服务器

    简单开始 1.安装node.https://nodejs.org/en/ 2.安装ws模块 ws:是nodejs的一个WebSocket库,可以用来创建服务. https://github.com/websockets/ws 3.server.js 在项目里面新建一个server.js,创建服务,指定8181端口,将收到的消息log出来. var WebSocketServer = require('ws').Server, wss = new WebSocketServer({ port: 8

  • node.js中的socket.io入门实例

    关于websocket等反向ajax技术介绍 在实时web应用中,常见的方法是反向Ajax.反向Ajax的定义: 反向Ajax(Reverse Ajax)本质上则是这样的一种概念:能够从服务器端向客户端发送数据.在一个标准的HTTP Ajax请求中,数据是发送给服务器端的,反向Ajax可以某些特定的方式来模拟发出一个Ajax请求,这些方式本文都会论及,这样的话,服务器就可以尽可能快地向客户端发送事件(低延迟通信). 反向Ajax技术主要有两点内容:一是服务器端保持住TCP连接直到其有数据发送给客

  • node中socket.io的事件使用详解

    socket.io类库不但可以相互发送消息,而且还可以通过socket端口对象的emit方法互相发送事件. emit在之前的事件上说过现在一句话带过:emit是用来手动触发事件的. 复制代码 代码如下: socket.emit(event,data,function(data1,data2......){ }); 在使用emit方法发送事件时,可以再另一端使用socket端口对象的on方法会once方法监听. 复制代码 代码如下: socket.on(event,function(data,fn

  • node.js中Socket.IO的进阶使用技巧

    在上一篇博文Socket.IO中,我简要介绍了Socket.IO的基本使用方法并创建了一个简单的聊天室DEMO.本篇在入门篇的基础上,继续探讨Socket.IO的进阶用法.本篇将从配置.房间.事件等方面入手,介绍一些Socket.IO中实用的API和注意事项. 1. 配置 Socket.IO提供了4个配置的API:io.configure, io.set, io.enable, io.disable.其中io.set对单项进行设置,io.enable和io.disable用于单项设置布尔型的配置

  • nodejs实现套接字服务功能详解

    本文实例讲述了nodejs实现套接字服务功能.分享给大家供大家参考,具体如下: 一.什么是套接字 1. 套接字允许一个进程他通过一个IP地址和端口与另一个进程通信,当你实现对运行在同一台服务器上的两个不同进程的进程间通信或访问一个完全不同的服务器上运行的服务时,套接字很有用.node提供的net模块,允许你既创建套接字服务器又创建可以连接到套接字服务器的客户端. 2. 套接字位于HTTP层下面并提供服务器之间的点对点通信.套接字使用套接字地址来工作,这是IP地址和端口的组合.在套接字连接中,有两

  • Node.js中使用socket创建私聊和公聊聊天室

    先给大家展示效果图: 在上篇文章给大家介绍使用Angular和Nodejs.socket.io搭建聊天室及多人聊天室,本文继续介绍Node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧. nodejs的应用中,关于socket应该是比较出彩的了,socket.io在github上有几万人的star,它的成功应该是不输于express的,为了方便了解整个socket.io的使用. 例子请点击http://chat.lovewebgames.com/ 源码下载https://git

随机推荐