未找到

未发布 [转] Node.js开发入门—套接字(socket)编程
by tries keys 分享 1487059334292

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

使用JavaScript也可以进行套接字编程,哈哈,这酸爽!

代码

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

echoServer代码分析

echoServer.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模块api在这里:https://nodejs.org/api/net.html

我使用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。

我处理了data事件,data事件有一个参数,代表读到的数据。我在回调中直接使用net.Socket.write把数据原封不动发还给客户端。这是echo的一种实现。还有一种更方便的实现,就是调用net.Socket的pipe方法,Node.js net模块文档里提供的echoServer就是用的pipe,去看看吧。

echoClient代码分析

echoClient.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);

客户端代码稍长了一些。因为我想让echo更像echo,就调用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 echoServer.js”,然后执行“node echoClient.js”,就可以在echoClient的控制台界面输入一些内容了。效果如下图:

echoServerClientpng


其它文章:

未发布 MyEclipse中的SQL Server & Sybase使用方法
by AABBbaby keys 分享 1515121022349

1. 在MyEclipse中获取额外的SQL Server和Sybase功能

本文档中描述的扩展的SQL Server和Sybase功能不向MyEclipse的标准用户提供。扩展功能目前覆盖了程序、函数、触发器和视图。

掌握Node.js的文件系统[File System 基础]
by ourjs keys JS学习 Node.JS 1444293219582
Node最引以为傲的就是它有一个非常小的核心。有一些语言绑定了完整的POSIX API,而 Node实现了尽可能少的绑定,并通过同步、异步或流API形式暴露他们。

这种方法意味着,操作系统中有一些非常方便的功能,需要在Node中重建。这是一个教你如何使用文件系统软件包的实用教程。
未发布 Zend Studio使用教程之升级Zend Studio(2/3)
by AABBbaby keys 分享 1465956096530

Zend Studio是新一代的专业级智能PHP IDE,它旨在帮助开发人员提高工作效率,创造出高品质的PHP应用程序!它包含了PHP开发所必须的部件,通过一整套的编辑、调试、分析、优化和数据库工具,Zend Studio加速开发周期,并简化复杂的应用方案。本教程主要说明如何升级Zend Studio的各种可用程序。

Zend Studio最新试用版下载请猛戳>>>
未发布 用户界面框架jQuery EasyUI发布v1.4.5|附下载
by AABBbaby keys 分享 1459909638725

jQuery EasyUI致力于帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。jQuery EasyUI提供了基于当下流行的jQuery core和HTML5的控件,助您打造适合当今网络的应用程序。

免费下载:jQuery EasyUI v1.4.5

索引:像Mongo一样查询IndexedDB
by 1518409521 keys 行业动态 开源 1400458278563

作为Riggr SPA库的一部分,我一直在做这个项目,在这个项目中我想用和Mongo同样的交互方式使用IndexedDB。
IndexedDB(如果你还没使用它)对于客户端/浏览器数据存储来说是一个很有用的解决方案。虽然对老版本浏览器的支持依然缺乏,使用IDB更新应用程序,甚至作为一个不支持老版本浏览器的特性, IndexedDB绝对是值得的。

未发布 Visual Studio 2017 v15.5预览版的新特性先睹为快
by Harriet666 keys 分享 1508923045165
Microsoft延续了Visual Studio 2017快速迭代开发的步伐,最新发布了15.5预览版,这是VS2017这一广受欢迎的IDE自发布以来的第五次更新,该预览版的发布使用户可以先睹为快。

该预览版启用了一个称为“Stepping Back”的调试历史新特性。IntelliTrace会在整个断点的每一步上,自动对应用状态做快照,这将赋予开发人员浏览断点前后状态的能力,更易于观察在断点前后的运行效果。
 
Visual Studio 2017下载>>>

此外,Microsoft还进一步改进了基于C#和Visual Basic的解决方案的加载速度。据其宣称,所有解决方案应可在10秒内至少加载一半以上。相应地,C++开发人员应能看到IntelliTrace在执行常见命令时,性能得到了显著的提升,其中包括重命名(Rename)、更改签名(Change Signature)和找出所有引用(Find All References)等。

VS2017 15.4的IDE为C#、VB和Python开发人员提供了一种通过“Control键+点击”进入所点击项定义的功能。该功能现在也已经添加到C++的开发中。还改进了C++代码的生成,一旦受此影响的C++项目在15.5下重新编译,应该就能体验到此次更新的改进。

VS2017在安装程序上也做了一些改进,这可能会受到那些安装了多个版本VS2017的开发人员(例如在最新的VS2017旁安装了VS2017预览版)的欢迎。现在安装时会自动地创建Windows恢复点,并且每个已安装的VS2017拷贝会以不同的项列出在“添加&删除程序”(Add & Remove Programs)安装阶段的显示中。

和其它预览版一样,该预览版也不应安装在生产环境中。完整的发行说明已经给出,其中涵盖了15.5第一个预览版中包含的所有改进。
未发布 MFC界面库BCGControlBar v25.0新功能详解一:可视化主题
by AABBbaby keys 分享 1467339114179
BCGControlBar Pro for MFC最新试用版下载请猛戳>>>

亲爱的BCGSoft用户,我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v25.0正式发布!我们为您提供开发桌面应用最简单、最有效的方法!接下来几篇文章将对这个版本的新功能一一进行介绍,让您对BCG这个控件有一个全新的认识和了解。需要最新版的可以点击这里【BCG下载

未发布 新技能get√ 如何使用UI工具包
by monkey keys 分享 1408933613615
相信不少有收藏癖的朋友已经在电脑上囤积了很多UI工具包,却从来没有亲身实践过。那么这些UI工具包到底如何使用呢?下面就为你揭晓答案!
怎样将Android手机中的照片和视频,通过APP自动同步备份到OnceAir云盘的共享目录中
在OnceAir设置共享目录后,就可以将手机的文件夹和共享文件夹连接起来,将手机文件自动同步到OnceAir。本文就从创建共享目录开始,说明一下怎样实现手机文件的自动同步。

 近期热门 - 点击最多
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Node.js 打印vite react+go项目目录树
  3. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  4. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  5. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  6. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  7. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  8. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  9. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  10. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法

  全端社区 - 最新回复
  1. 在无管理员权限的情况下,使用安装Python补全 pip临时配置环境变量
  2. Python鉴权方法:Depends 依赖注入;装饰器;与基于Proxy模式的Session状态管理自动计算脏属性;将用户数据存储在Redis中
  3. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  4. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  5. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  6. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  7. Node.js 打印vite react+go项目目录树
  8. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  9. Windows与Mac通过git ssh和rsync实现文件共享互传
  10. Windows与Mac通过git ssh和scp实现文件共享互传

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA