学习node.js 第4篇 建立一个最小的web聊天系统
我们生活在一个实时的世界里,有什么比聊天更加实时吗?那就让我们先写一个基
于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聊天系统的更多相关文章
- Node.js简单介绍并实现一个简单的Web MVC框架
编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...
- 学习node.js 第2篇 介绍node.js 安装
Node.js - 环境安装配置 如果愿意安装设置Node.js环境,需要计算机上提供以下两个软件: 一.文本编辑器 二.Node.js二进制安装包 文本编辑器 这将用来编写程序代码. 一些编辑器包括 ...
- 学习node.js 第1篇 介绍nodejs
Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架. 它的最新版本是:v0.12.7(在编写本教程时的版本).Node.js在官方 ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- Node.js Stream-基础篇
Node.js Stream - 基础篇 邹斌 ·2016-07-08 11:51 背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分.这些部分的接口遵循一定的规范,通过某种方式相连,以共同 ...
- 如何系统地学习Node.js?
转载自知乎:http://www.zhihu.com/question/21567720 ------------------------------------------------------- ...
- 给迷茫的你学习Node.js最好的方法
这是真事儿,在3w咖啡整理书稿,然后小弟梁过来了,聊聊他的现状,一副很不好的样子,在天津我曾带过他大半年,总不能不管,我给他的建议是:“每天看10个npm模块” 对于学习Node.js迷茫的人来说,这 ...
- 学习node js 之微信公众帐号接口开发 准备工作
绪:因工作须要,近期開始学习Node js,之前隐隐约约听到过node js 但没有实际见到过,仅仅好google了:至于什么是node js,能做些什么,有多么好.或者有哪些弊端我这里就不多说了,由 ...
- 【灵魂拷问】你为什么要来学习Node.js呢?
[灵魂拷问]你为什么要来学习Node.js呢? 学习node.js适合的人群: 需要必备一些HTML,CSS,JavaScript及编程有一定程度了解的读者阅读,一些简单的命令行操作,具备服务端开发经 ...
随机推荐
- iOS--开发之手势解锁
本文主要介绍通过手势识别实现手势解锁功能,这个方法被广泛用于手机解锁,密码验证,快捷支付等功能实现.事例效果如下所示. 首先,我们先分析功能的实现过程,首先我们需要先看大致的实现过程: 1.加载九宫格 ...
- iOS--APP 登录界面图(xuer)
ViewController.h #import "ViewController.h" @interface ViewController () @property(strong, ...
- 【转】IOS开发中图片资源使用png还是jpg格式
对于iOS本地应用程序来说最简单的答案就是始终使用PNG,除非你有非常非常好的理由不用它. 当iOS应用构建的时候,Xcode会通过一种方式优化.png文件而不会优化其它文件格式.它优化得相当的好 他 ...
- Android线程池(一)
本篇文章主要介绍Android自带的线程池的使用. 首先要引入线程池的概念 线程池:是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 线程池线程都是后台线程.每个线 ...
- android创建自定义控件
新建一个布局title.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xm ...
- Linux套接字编程
网络中的进程是如何通信的? 在网络中进程之间进行通信的时候,那么每个通信的进程必须知道它要和哪个计算机上的哪个进程通信.否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行 ...
- Scrum不是万能药,要在时机成熟时推行
敏捷很火热,大家都在谈敏捷:但不是所有团队都适合敏捷! 需要等待时机,时机成熟了,才推! 什么时候算时机成熟呢? 我们的经验是需要两点: 一.团队有三名或以上的研发工程师 : 二. 团队内有一名合适的 ...
- Windows下查看端口占用
最近在重新安装Mysql的时候,发现3306默认端口被占用了.类似的情况常常遇到,想查看到底是哪个程序把这个端口占用了. 下面是我google找到的方法,和大家分享. 1. 首先,使用netstat ...
- PHP笔试题(转载)
整理了一份PHP高级工程师的笔试题,问题很全面.嗯,基本上这些题都答得不错,那么你应该可以胜任大部分互联网企业的PHP职位了.下面直接上题. 1. 基本知识点 HTTP协议中几个状态码的含义:503, ...
- SSH服务器拒绝了密码,xshell连不上虚拟机怎么办
用Xshell链接虚拟机的时候,出现下面情况: 这是sshd的设置不允许root用户用密码远程登录 解决方案: 修改 vim /etc/ssh/sshd_config 找到# Authenticati ...