我们生活在一个实时的世界里,有什么比聊天更加实时吗?那就让我们先写一个基
于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. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q91-Q93)

    Question 91You have a custom user profile property named MyProperty.You need to create a Web Part th ...

  2. response实现验证码图片

    package com.zhangbz.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2 ...

  3. Linux 基础知识----shell

    1.file title: #!/bin/bash 2.input: echo $1 echo $2 3.if # ifif [ "$1" = "N" ]the ...

  4. MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用

    MongoDB的下载地址:http://www.mongodb.org/downloads. 下载好直接解压安装包,即可使用. bin目录下的几个文件说明: mongo 客户端程序,连接MongoDB ...

  5. 【UXPA工作坊小记】郎学明:做更“有用”的用户研究

    xueminglang@google.com 本来做了一些笔记,但郎老师后来发了相关教材.内容比现场PPT详细的多.由于,本人在网上也没有搜索到相关文章,还是决定做一回码字工,稍作精简后分享给大家. ...

  6. .NET 创建Windows服务,及服务的安装卸载

    .NET服务创建过程 http://jingyan.baidu.com/article/fa4125acb71a8628ac709226.html 相关命令(要以管理员身份打开cmd) 安装服务 -& ...

  7. JavaScript生成GUID的算法

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...

  8. OO的设计原则

    今天同事和我们一起讨论分享了OO的设计原则,讨论使人明晰,有人一起讨论学习是一件幸福的事情. 1.开闭原则 对功能的扩展是开放的,对修改是闭合的. 可以应用于类的设计,框架的设计等. 为什么?开闭原则 ...

  9. Hadoop Yarn core concepts

    The fundamental idea of YARN is to split the two major responsibilities of the JobTracker—that is, r ...

  10. Java zip and unzip demo

    目录结构如下: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import ...