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),那么把输入文本框的内容发送给服务器。
分享到:
相关推荐
Live-chat-with-node.js:使用Node.js套接字的实时聊天室
即时聊天应用描述在Node js和socket.io的帮助下使用HTML和javascript制作的实时聊天应用程序预习运行程序$ git clone https://github.com/zaidajani/live-chat-app.git# Copy the project$ cd live-chat-app# Get ...
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'
chat21-node-sdk测试: npm测试更新版本: npm版本发布: 发布模块: npm发布-公开访问
节点聊天一个简单的Node.js + WebSockets聊天
基于node-chat写的 web前端sdk
这是一个由 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_Chat 使用Socket.io和Node js聊天应用程序
JavaScript实现语音聊天 描述 程序在 的群聊功能基础上利用webRTC技术,添加了语音群聊功能,在其他人键盘输入时,会出现类似微信的对方正在输入字样。demo: 使用的nodejs模块 express:创建一个web服务器 https:...
聊天节点node.js 聊天示例(english) 这是一个在 node.js 中进行的聊天示例。 为了让它工作,你必须: 安装节点( ) 制作这个 repo 的 git clone 在根文件夹中运行“npm start” 聪明的! (英文)这是一个 node.js ...
聊天-js 使用 JavaScript Node JS Socket.io 的聊天应用程序
适用于node.jsJavaScript RocketChat API 从分叉一个node.js模块,它为RocketChat REST API提供了一个面向对象的包装器。 RocketChat官方网站地址可以在找到。 可以在找到RocketChat REST API文档。 该库的版本与...
Chat.JS(脆弱的NodeJS网络应用)元数据威廉·穆迪21.03.2021描述Node.JS中编写的一个小型Web应用程序,用于练习NoSQLi和反序列化攻击。 可以在./exploit找到./exploit漏洞利用程序以及相关说明。如何在本地运行克隆...
node-js-入门 使用准系统 Node.js 应用程序。 此应用程序支持文章 - 请查看。 在本地运行 确保你已经安装了和 。 $ git clone git@github.com:heroku/node-js-getting-started.git # or clone your own fork $ cd ...
node_chat:聊天应用程序的后端