我们生活在一个实时的世界里,有什么比聊天更加实时吗?那就让我们先写一个基
于TCP 的聊天服务器吧,并且支持Telnet 连接。这很容易,而且能够完全用Node
来编写。
首先,我们需要在Node 中包含TCP 模块,并创建一个新的TCP

// JavaScript Document
var net = require('net');
chatServer = net.createServer();
chatServer.on('connection', function(client){
client.write('Hi!\n');
client.write('Bye!\n');
client.end();
})
chatServer.listen(9000);

代码第一行,我们加载了net 模块。这个模块包含了Node 需要的所有TCP 功能。
接着,我们调用net.createServer() 方法来创建一个新的TCP 服务器。有了这
个服务器,我们需要用它做点儿事。这里调用on() 方法来添加一个事件监听器。
每当有新的客户端通过网络连接接入服务器,就会触发connection 事件,事件监
听器就会调用我们指定的函数。
连接事件在调用回调函数时,会传给我们新客户端所对应的TCP socket 对象的引
用。我们把此引用命名为client。调用client.write(),就能发送信息给该客
户端。目前,我们只是简单地发送“Hi!” 和“Bye!”,然后调用client.end() 方
法来关闭连接。就这么简单,我们的聊天服务器已经初露端倪了。最后,需要调用
listen() 函数,好让Node 知道监听哪个端口。让我们马上测试一下吧。
我们可以使用Telnet1(大多数操作系统都自带此程序)来连接新服务器进行测
试。首先,调用node 命令并带上文件名来启动服务器。然后,打开Telnet 连接到
localhost 的9000 端口(这是我们在Node 程序中指定的端口 服务器)

到目前为止,我们创建了一个服务器,它能够接受客户端的连接,并且在断开连接
前发送了一小段内容。但这还不能称为聊天服务器,我们再来添加几个功能吧。首
先,需要能收到客户端发送的消息

var net = require('net')
var chatServer = net.createServer()
chatServer.on('connection', function(client) {
client.write('Hi!\n');
client.on('data', function(data) {
console.log(data)
})
})
chatServer.listen(9000)

这里添加了另外一个事件监听器, 调用的是client.on()。注意, 我们是在
connection 回调函数的作用域中添加的这个事件监听器,这样就可以访问到连接
事件所对应的client 对象。新监听器关注的是data 事件,每当client 发送数据
给服务器时,这一事件都会被触发。接着要删掉client.end() 这一行。如果关闭
了和客户端的连接,又如何获得新的数据呢?(当然,说“再见”那一行同样也删
掉了。)现在,无论我们发任何数据给服务器,它都会在终端打印出来

学习node.js 第4篇 建立一个最小的web聊天系统的更多相关文章

  1. Node.js简单介绍并实现一个简单的Web MVC框架

    编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...

  2. 学习node.js 第2篇 介绍node.js 安装

    Node.js - 环境安装配置 如果愿意安装设置Node.js环境,需要计算机上提供以下两个软件: 一.文本编辑器 二.Node.js二进制安装包 文本编辑器 这将用来编写程序代码. 一些编辑器包括 ...

  3. 学习node.js 第1篇 介绍nodejs

    Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架. 它的最新版本是:v0.12.7(在编写本教程时的版本).Node.js在官方 ...

  4. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  5. Node.js Stream-基础篇

    Node.js Stream - 基础篇 邹斌 ·2016-07-08 11:51 背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分.这些部分的接口遵循一定的规范,通过某种方式相连,以共同 ...

  6. 如何系统地学习Node.js?

    转载自知乎:http://www.zhihu.com/question/21567720 ------------------------------------------------------- ...

  7. 给迷茫的你学习Node.js最好的方法

    这是真事儿,在3w咖啡整理书稿,然后小弟梁过来了,聊聊他的现状,一副很不好的样子,在天津我曾带过他大半年,总不能不管,我给他的建议是:“每天看10个npm模块” 对于学习Node.js迷茫的人来说,这 ...

  8. 学习node js 之微信公众帐号接口开发 准备工作

    绪:因工作须要,近期開始学习Node js,之前隐隐约约听到过node js 但没有实际见到过,仅仅好google了:至于什么是node js,能做些什么,有多么好.或者有哪些弊端我这里就不多说了,由 ...

  9. 【灵魂拷问】你为什么要来学习Node.js呢?

    [灵魂拷问]你为什么要来学习Node.js呢? 学习node.js适合的人群: 需要必备一些HTML,CSS,JavaScript及编程有一定程度了解的读者阅读,一些简单的命令行操作,具备服务端开发经 ...

随机推荐

  1. iOS 清理缓存功能实现第一种方法

    添加一个提示框效果导入第三方MBProgressHUD #import "MBProgressHUD+MJ.h" /** * 清理缓存第一种方法 */ -(void)clearCa ...

  2. SPC.NET,为5年的开发做个结尾

    从08年到如今从事asp.net开发已五年,起初只是一个简单的喜好,想做个东西出来.于是SPC.NET的前生诞生了,直至今日. 不得不说,一个人开发一个软件是很辛苦的事情,以下是SPC.NET的一些特 ...

  3. spring源码分析的书到了

    现在写java后台可以说都能用上spring 在原有的spring基础上,加上自己定制的一些功能,能够使编程变得非常简化. 我也准备在我的毕业设计中写一些spring改造的东西.用来简化开发. 就拿连 ...

  4. Node.js之Promise维护(同步)多个回调(异步)状态

    金天:学习一个新东西,就要持有拥抱的心态,如果固守在自己先前的概念体系,就会有举步维艰的感觉..NET程序员初用node.js最需要适应的就是异步开发, 全是异步,常规逻辑下遍历列表都是异步,如何保证 ...

  5. 关于Redis info的参数总结

    Redis官网对 info 已经讲解的比较清楚的,参考文档 .可以看到,info的输出结果是分几块的,有Servers.Clients.Memory等等,通过info后面接这些参数,可以指定输出某一块 ...

  6. hping3

    [root@zxserver104 ~]# hping3 -c -d -S -w -p --flood --rand-source 115.236.6x.19x 1. hping3 = 应用程序二进制 ...

  7. SSH 端口映射(一)

    转载:http://blog.csdn.net/a351945755/article/details/21785647,http://blog.csdn.net/gaoming655/article/ ...

  8. 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

    运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such f ...

  9. 学习嵌入式Linux-选择iTOP-4412开发板

    部分视频观看地址: [视频教程]iTOP-4412开发板之学习方法--致初学者 http://v.youku.com/v_show/id_XNzQ5MDA4NzM2.html [视频教程]三星Exyn ...

  10. [转][ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action

    本文转自:http://www.cnblogs.com/willick/p/3410855.html 概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在 ...