server.js
有几个关键变量
1. channel
有messages和callbacks两个数组,分别用来存放消息列表和被挂起的客户端列表(也就是说等待取新消息的客户端,这些客户端还在等待响应)
有appendMessage和query两个操作方法,分别用来添加新消息到消息列表和查询新消息发给各个客户端列表
有一个定时任务setInterval,用来清理客户端列表里面30秒没有来服务器query消息的客户端,也就是说连接断开后30秒才能判断无效,不过程序里面貌似有个bug,就是说如果每次客户端来去消息的时候如果没有消息才刷新一下客户端列表,如果每次来取message的时候都有新message的话,客户端列表就无法刷新,也就是说30秒的新消息就可以剔除所有挂起的客户端,虽然这样情况很少见,但是高并发的情况下还是有可能的。值得注意的是这个30秒的挂起时间必须小于这个客户端session的超时时间,要不然,即使有新消息来的时候,条用callback的时候会出错,因为连接已经被断开释放了,(下面的session里面的destroy方法会在60秒的时候给客户端发送断开消息来结束当前的callback)
2. sessions
维护客户端会话列表,有一个createSession方法,用于新的连接加入会话列表,一个定时任务,用来定时清理60秒没有动作的客户端,不过我想这个时间应该跟上面的callbacks列表保持同步才好,
其中每个session包含nick,id, timestamp信息,poke和destroy两个方法。
3. 定义客户端请求处理路由
有who请求,用来查询所有sessions里面的客户端列表
有join请求,用来加入sessions列表,并发送一条加入消息到messages列表
有part请求,用来断开连接,并发送一条离开消息到messages列表
有recv请求,我觉得应该叫tryToGetMessage比较好,用来给客户端查询最新消息的,并刷新sessions列表,主要是条用channel的query方法,但是query方法有个特点,就是如果没有新消息,那么客户端的请求就会被挂起,最多会让客户端等待30秒才能返回一个空消息回去,让客户端进行下一个请求。这个在client.js里面的ajax调用配合了,一般默认ajax的超时时间肯定长于这个30秒,所以连接不会很平凡
有send请求,用来接收客户端发送过来的一条新消息,并刷新当前session。
client.js
主要方法
1.连接和断开
很简单,直接调用join请求和part请求,其中part请求被绑定在页面的unload事件,但是unload在浏览器crash的情况下就无法调用了,这个有待完善
2. longPool
首先检查是否需要重连,即showConnect状态,connect按钮又可以点击了
检查是否第一次连接,如果是的,条用who请求,得到客户端列表,显示在所有在线列表中
ajax调用recv请求,得到最后一次取消息到现在为止的新的消息列表,第一次的话取所有消息
很简单吧,符合正常逻辑
3. send
发送消息很简单,直接条用send请求,输入框绑定了keypress请求,如果是回车(keyCode是13),那么把输入文本框的内容发送给服务器。
分享到:
相关推荐
【标题】"Node.js + WebSockets聊天应用:node-chat" 在本文中,我们将深入探讨一个基于Node.js和WebSockets技术构建的简单聊天应用程序——node-chat。这个项目旨在为初学者提供一个学习实时通信技术的平台,同时...
即时聊天应用描述在Node js和socket.io的帮助下使用HTML和javascript制作的实时聊天应用程序预习运行程序$ git clone https://github.com/zaidajani/live-chat-app.git# Copy the project$ cd live-chat-app# Get ...
总的来说,这个项目为Web开发者提供了一种使用Node.js和JavaScript实现实时通信的方式,借助于"node-chat"这一基础框架和提供的SDK,开发者可以快速集成聊天功能,而无需从头开始编写复杂的网络通信逻辑。...
Chat21是一个强大的聊天平台,提供了多种SDK,包括Node.js版本的SDK,即"chat21-node-sdk"。这个SDK允许开发者在Node.js环境中轻松集成Chat21的聊天功能,以便在自己的应用或网站上构建实时的、互动的通信体验。 ##...
var chatServer = chat.createServer();chatServer.listen(8001);创建服务器后,即可添加频道。 // create a channel at http://localhost:8001/chatvar channel = chatServer.addChannel({ basePath: "/chat" });...
简单的节点聊天应用这是一个简单的聊天应用程序,内置: node.js 套接字在heroku上检查一下: ://paolown-node-chat-app.herokuapp.com/快速开始# installnpm install# run the servernpm run server指导该应用程序...
node-js-入门 使用准系统 Node.js 应用程序。 此应用程序支持文章 - 请查看。 在本地运行 确保你已经安装了和 。 $ git clone git@github.com:heroku/node-js-getting-started.git # or clone your own fork $ cd ...
节点聊天 入门 安装依赖: npm install 然后从根目录使用npm start聊天 发展 npm run-script start-dev :以开发模式启动。 对前端资产使用grunt watch ,对服务器使用supervisor 。
节点RocketChat Bot NodeJS RocketChat Bot框架 关于 该库旨在“包含电池”,目的是使部署RocketChat bot尽可能容易。 特征 菜单助手使使用或选择菜单变得非常容易。... const bot = require ( 'node-rocketchat-bot'
【JavaScript Node.js Socket.io 聊天应用详解】 在当今的Web开发中,实时通信功能已经成为许多应用程序不可或缺的一部分,例如在线聊天、协作工具等。利用JavaScript、Node.js和Socket.io,我们可以构建出高效的...
Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,因其异步非阻塞I/O模型而特别适合处理大量并发连接。Socket.IO则是一个实时应用程序框架,它提供了一种简单的方式来实现WebSocket协议以及其他降级方案,...
Chat.JS(脆弱的NodeJS网络应用)元数据威廉·穆迪21.03.2021描述Node.JS中编写的一个小型Web应用程序,用于练习NoSQLi和反序列化攻击。 可以在./exploit找到./exploit漏洞利用程序以及相关说明。如何在本地运行克隆...
标题中的“node-js-chat”指的是一个使用Node.js技术构建的在线聊天室项目。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它以其高效的非阻塞I/O模型和丰富的生态系统而受到开发者的欢迎,尤其适合于构建...
Node.js作为一款强大的JavaScript运行环境,因其异步、事件驱动的特性,非常适合构建实时应用程序,比如本文将要讨论的"node-chat"项目。这个项目是一个基于Node.js的多人视频聊天应用程序,它融合了文本和视频聊天...
"Node-chat"项目是一个利用Node.js和Socket.IO技术创建的在线聊天应用,它展示了如何利用这两种强大的工具实现即时、双向的数据传输,从而实现用户间的实时交流。 【Node.js】 Node.js是一个基于Chrome V8引擎的...
这是一个由 node.js 运行的包含两个 JavaScript 程序(服务器程序和客户端程序)的聊天室程序。 ####屏幕截图 ####About Node.js 作为异步事件驱动框架,Node.js 旨在构建可扩展的网络应用程序,您可以从下载或...
If you are a JavaScript developer with no experience with Node.js or server-side web development, this book is for you. It will lead you through creating a fairly complex social network. You will ...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够使用 JavaScript 来编写服务器端的应用程序。在这个“node.js 网页聊天室”项目中,我们将探讨如何利用 Node.js 构建一个实时的、多人参与...
本项目"node_chat"是基于Node.js构建的一个聊天室应用,它是对Node.js技术的一种实践性学习和运用。 【描述】 这个项目被标记为"学习做的练习",意味着它是一个教学或自我提升的工具,用于理解和掌握Node.js中的...
JavaScript实现语音聊天 描述 程序在 的群聊功能基础上利用webRTC技术,添加了语音群聊功能,在其他人键盘输入时,会出现类似微信的对方正在输入字样。demo: 使用的nodejs模块 express:创建一个web服务器 https:...