我们生活在一个实时的世界里,有什么比聊天更加实时吗?那就让我们先写一个基
于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. ogrinfo使用

    简介 orginfo是OGR模块中提供的一个重要工具,用于读取地图文件中记录,可以指定筛选条件(按字段.sql.矩形范围) 使用方式 命令行参数 Usage: ogrinfo [--help-gene ...

  2. iOS常用第三方库之Masonry

    有更新,请往最下边查看. 一.前言 关于苹果的布局一直是我比较纠结的问题,是写代码来控制布局,还是使用storyboard来控制布局呢?以前我个人开发的时候很少使用代码去写约束,因为太麻烦了.所以最终 ...

  3. 在virtualbox下使用vm映像文件

    virtualbox可以直接打开vmdk 创建虚拟机时先不要创建虚拟硬盘. 虚拟机创建成功后,在设置窗口,点击[存储],添加虚拟硬盘,点击选择现有的虚拟盘. 参考链接

  4. CoreAnimation-01-CALayer核心要点及实例解析

    CALayer基础 CALayer是每一个UI控件的核心,一个UI控件之所以能显示可以说是CALayer的功劳 每一个UI控件默认都为自己创建一个CALayer对象,通过drawRect方法将内容绘制 ...

  5. Effetive Java 22 Favor static member classes over nonstatic

    Nested class types Usage and remark Advantage Disadvantage static member classes Use for public help ...

  6. 最锋利的Visual Studio Web开发工具扩展:Web Essentials详解(转)

    Web Essentials是目前为止见过的最好用的VS扩展工具了,具体功能请待我一一道来. 首先,从Extension Manager里安装:最新版本是19号发布的2.5版 然后重启你的VS开发环境 ...

  7. 【转】LINUX 5 常用ftp telnet配置

    LINUX 5 常用ftp telnet配置 一.解决远程登陆乱码问题 目标:在xwindow和其console中使用中文界面,在纯console中使用英文 在/etc/profile最后加上一行 e ...

  8. Cinder 调试 - cinder service 状态为 down

    1. 问题 我们经常会发现某个cinder service 的状态为 down.比如下面例子中 controller 上的 cinder-scheduler 和 block1 节点上 cinder-v ...

  9. 不会UML的程序员不是好构架师?

    情况描述 我已经工作两年半, 参加过一个网页游戏项目和一个IOS应用项目, 自以为参与度非常高, 也经常涉及到底层引擎和主逻辑业务. 目前想更快的向构架师方向发展. 最近在看\<Learning ...

  10. hdu 5862 Counting Intersections

    传送门:hdu 5862 Counting Intersections 题意:对于平行于坐标轴的n条线段,求两两相交的线段对有多少个,包括十,T型 官方题解:由于数据限制,只有竖向与横向的线段才会产生 ...