


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Node.js + Web Socket 打造即时聊天程序嗨聊(1) 本文将使用 Node.js 加 web socket 协议打造一个网页即时聊天程序,取名为 HiChat,中文翻过 来就是嗨聊 ,听中文名有点像是专为寂寞单身男女打造的 AD: 前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断 推出的新技术。像 node.js 这样的后端开拓者直接将前端人员的能力扩大到了后端。瞬间就有 了一统天下的感觉,来往穿梭于前后端之间代码敲得飞起,从此由前端晋升为前后端。 图片来自 G+ 本文将使用 Node.js 加 web socket 协议打造一个网页即时聊天程序,取名为 HiChat,中文翻过 来就是嗨聊 ,听中文名有点像是专为寂寞单身男女打造的 其中将会使用到 express 和 socket.io 两个包模块,下面会有介绍。 源码 演示 在线演示 (heroku 服务器网速略慢且免费套餐是小水管,建议下载代码本地运行) 源码可访问项目的 GitHub 页面下载 本地运行方法: 命令行运行 npm install 模块下载成功后,运行 node server 启动服务器 打开浏览器访问 localhost 下图为效果预览: 本文示例环境为 Windows,Linux 也就 Node 的安装与命令行稍有区别,程序实现部分基本与 平台无关。 Node 相关 你需要在本机安装 Node.js(废话) 多少需要一点 Node.js 的基础知识,如果还未曾了解过 Node.js,这里有一篇不错的入门教程 然后我们就可以开始创建一个简单的 HTTP 服务器啦。 类似下面非常简单的代码,它创建了一个 HTTP 服务器并监听系统的 80 端口。 node server example 引入 http 模块 varhttp=require(http), 创建一个服务器 server=http.createServer(function(req,res) res.writeHead(200, Content-Type:textplain); res.write(helloworld!); res.end(); ); 监听 80 端口 server.listen(80); console.log(serverstarted); 将其保存为一个 js 文件比如 ser 高山美人茶 ver.js,然后从命令行运行 node server 或者 node server.js,服务器便可启动了,此刻我们可以在浏览器地址栏输入 localhost 进行访问, 也可以输入本机 IP,都不用加端口,因为我们服务器监听的是默认的 80 端口。当然, 如果你机子上面 80 端口被其他程序占用了,可以选择其他端口比如 8080,这样访问的时候需 要显示地加上端口号 localhost:8080。 Express 首先通过 npm 进行安装 在我们的项目文件夹下打开命令行(tip: 按住 Shift 同时右击,可以在右键菜单中找到从此处 打开命令行选项) 在命令行中输入 npm install express 回车进行安装 然后在 server.js 中通过 require(expre 玛瑙 ss) 将其引入到项目中进行使用 express 是 node.js 中管理路由响应请求的模块,根据请求的 URL 返回相应的 HTML 页面。这 里我们使用一个事先写好的静态页面返回给客户端,只需使用 express 指定要返回的页面的路 径即可。如果不用这个包,我们需要将 HTML 代码与后台 JavaScript 代码写在一起进行请求的 响应,不太方便。 返回一个简单的 HTML 内容 server=http.createServer(function(req,res) res.writeHead(200, Content-Type:texthtml将返回类型 由 textplain 改为 texthtml ); res.write( h1 helloworld! h1 );返回 HTML 标签 res.end(); ); 在存放上一步创建的 server.js 文件的地方,我们新建一个文件夹名字为 www 用来存放我们的 网页文件,包括图片以及前端的 js 文件等。假设已经在 www 文件夹下写好了一个 index.html 文件(将在下一步介绍,这一步你可以放一个空的 HTML 文件) ,则可以通过以下方式使用 express 将该页面返回到浏览器。可以看到较最开始,我们的服务器代码简洁了不少。 使用 express 模块返回静态页面 varexpress=require(express),引入 express 模块 app=express(), server=require(http). createServer(app); app.use(,express.static(_dirname+www);指定静态 HTML 文件的位置 server.listen(80); 其中有四个按钮,分别是设置字体颜色,发送表情,发送图片和清除记录,将会在下面介绍其 实现 socket.io Node.js 中使用 socket 的一个包。使用它可以很方便地建立服务器到客户端的 sockets 连接,发 送事件与接收特定事件。 同样通过 npm 进行安装 npm install socket.io 。安装后在 node_modules 文件夹下新生成了一个 socket.io 文件夹,其中我们可以找到一个 socket.io.js 文件。将它引入到 HTML 页面,这样我 们就可以在前端使用 socket.io 与服务器进行通信了。 scriptsrc= socket.iosocket.io.js script 同时服务器端的 server.js 里跟使用 express 一样,也要通过 require(socket.io)将其引入到项目中, 这样就可以在服务器端使用 socket.io 了。 使用 socket.io,其前后端句法是一致的,即通过 socket.emit()来激发一个事件,通过 socket.on() 来侦听和处理对应事件。这两个事件通过传递的参数进行通信。具体工作模式可以看下面这个 示例。 比如我们在 index.html 里面有如下 JavaScript 代码(假设你已经在页面放了一个 ID 为 sendBtn 的按钮): scripttype= textjavascript varsocket=io.connect(),与服务器进行连接 button=document.getElementById(sendBtn); button. spanfunction() socket.emit(foo,hello);发送 一个名为 foo 的事件,并且传递一个字符串数据 hello script 上述代码首先建立与服务器的连接,然后得到一个 socket 实例。之后如果页面上面一个 ID 为 sendBtn 的按钮被点击的话,我们就通过这个 socket 实例发起一个名为 foo 的事件,同时传递 一个 hello 字符串信息到服务器。 与此同时,我们需要在服务器端写相应的代码来处理这个 foo 事件并接收传递来的数据。 为此,我们在 server.js 中可以这样写: 服务器及页面响应部分 varexpress=require(express), app=express(), server=require(http). createServer(app), io=require(socket.io).listen(server);引入 socket.io 模块并绑定到服务器 app.use(,express.static(_dirname+www); server.listen(80); socket 部分 io.on(connection,function(socket) 接收并处理客户端发送的 foo 事件 socket.on(foo,function(data) 将消息输出到控制台 console.log(data); ) ); 现在 Ctrl+C 关闭之前启动的服务器,再次输入 node server 启动服务器运行新代码查看效果, 一切正常的话你会在点击了页面的按扭后,在命令行窗口里看到输出的hello字符串。 一如之前所说,socket.io 在前后端的句法是一致的,所以相反地,从服务器发送事件到客户端, 在客户端接收并处理消息也是显而易见的事件了。这里只是简单介绍,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024北京北师大实验中学高二12月月考数学试题及答案
- 2025年公共关系管理专业考试试题及答案
- 2025年工程师职称考试试卷及答案
- 2025年医务人员心理健康讲座
- 人教版小学数学四年级下册第9单元《鸡兔同笼》课件
- 2025年上海市闵行区文莱中学七下英语期末检测模拟试题含答案
- 组织提取胶原细胞迁移实验操作指南
- 少先队法制教育活动
- 2025年房地产市场与政策分析知识测试试卷及答案
- 2025年湖北省宜城市八下英语期中预测试题含答案
- 中医诊所负责人合作协议书范文
- 循环系统疾病智慧树知到答案2024年哈尔滨医科大学附属第一医院
- 2024-2030年中国激光水平仪行业市场发展趋势与前景展望战略分析报告
- 疑难病例讨论课件
- 部编本小学语文六年级下册毕业总复习教案
- JB∕T 11864-2014 长期堵转力矩电动机式电缆卷筒
- 小儿氨酚黄那敏颗粒的药动学研究
- 生态环境行政处罚自由裁量基准
- 长沙市开福区2024届六年级下学期小升初数学试卷含解析
- 2024年安徽普通高中学业水平选择性考试化学试题及答案
- DZ/T 0462.3-2023 矿产资源“三率”指标要求 第3部分:铁、锰、铬、钒、钛(正式版)
评论
0/150
提交评论