运行方式如下:
node long.js
不断往服务器目录放置message文件如:(echo "new message" > message)
首页index.html如下
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Test Long-Polling</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script> </head> <body> <div id="container"> <h1>Test Long-Polling</h1> <ul id="results"> </ul> </div> <script> $(function ($) { function longPoll() { $.ajax({ type: 'POST', url: 'http://127.0.0.1:8080/get', data: '', success: function(data) { console.log(data); $('#results').append('<li>' + data + '</li>'); longPoll(); //获取到数据后继续发起请求 }, error:function(){ setTimeout(function(){ //如果网络或者服务器异常,则等待5s再发起请求 longPoll(); }, 5000); } }); } longPoll(); }); </script> </body> </html>
服务long.js如下:
var http = require("http"), url = require("url"), path = require("path"), fs = require("fs"); var handle = {} handle["/get"] = getHandler; var handleStream; http.createServer(function (req, res) { var pathname=url.parse(req.url).pathname; if(typeof handle[pathname] === "function"){ handle[pathname](res, req); } else { /* * 发送静态页面:首页 */ pathname=__dirname+url.parse(req.url).pathname; if (path.extname(pathname)=="") { pathname+="/"; } if (pathname.charAt(pathname.length-1)=="/"){ pathname+="index.html"; } fs.exists(pathname,function(exists){ if(exists){ switch(path.extname(pathname)){ case ".html": res.writeHead(200, {"Content-Type": "text/html"}); break; default: res.writeHead(200, {"Content-Type": "application/octet-stream"}); } fs.readFile(pathname,function (err,data){ res.end(data); }); } else { res.writeHead(404, '404 Not Found', {'Content-Type': 'text/html'}); res.end('<h1>404 Not Found</h1>'); } }); } }).listen(8080, "0.0.0.0"); console.log("Server running at http://0.0.0.0:8080/"); function getHandler(res, req){//如果是post方式请求,返回消息,否则返回404,简单的安全保证 if (req.method == 'POST') { return handleStream(req, res); } res.writeHead(404, '404 Not Found', {'Content-Type': 'text/html'}); res.end('<h1>404 Not Found</h1>'); } //用文本文件模拟消息或者数据库,正式环境还是应该用mysql或者redis替换 handleStream = function (req, res) { var filename = './message'; fs.readFile(filename, 'utf8', function (err, data) { if (!err) { res.writeHead(200, {'Content-Type': 'text/html'}); res.end(data); fs.unlinkSync(filename) //删掉message文件 } else { //设置10秒以后重新检测message文件内容 setTimeout(function() { handleStream(req, res) }, 10000); } }); }
相关推荐
node.js chat是node.js作者用JS写的一个多人聊天工具, 源代码公开下载,网址是chat.nodejs.org。作者用这个小例子,来展示如何用nodejs开发高效率的应用程序。对于nodejs的学习者来说,是一个很好的例子
这些技术都是为了实现客户端与服务器之间的高效、实时的数据交换,特别是在Web开发中创建聊天、协作工具和其他实时应用时。 首先,我们来了解**长轮询**。长轮询是一种HTTP持久连接,它允许服务器在有新数据可用时...
Socket.IO支持多种传输机制,如WebSocket、Long-Polling等,确保在各种网络条件下都能保持连接。它提供了一个简单的API,使得开发者可以轻松地实现服务器与客户端之间的实时双向通信。 **三、创建推送通知服务器** ...
它不仅支持WebSocket协议,还通过其他技术(如polling、long-polling)为不支持WebSocket的浏览器提供了兼容性,确保了跨平台的实时性。 接下来,我们将分步骤地构建这个聊天室: 1. **项目初始化**: 首先,确保...
Socket.io的核心是通过WebSocket协议来提供实时通信,但同时它也支持其他多种备选的 fallback 技术,如polling、long-polling等,确保在各种网络环境中都能稳定工作。 WebSocket是一种在客户端和服务器之间建立持久...
它不仅封装了WebSocket协议,还提供了对polling、long-polling等多种兼容旧浏览器的解决方案。在这个聊天室中,Socket.IO负责在客户端和服务器之间建立连接,实现实时消息的传输。当一个用户发送消息时,Socket.IO会...
它是基于WebSocket协议的,但同时也支持其他几种 fallback 技术,如polling、long-polling等,确保在不支持WebSocket的环境中也能实现类似的功能。WebSocket是一种在单个TCP连接上进行全双工通信的协议,相比HTTP,...
它会自动降级到其他实时通信技术,如polling或long-polling。 4. **HTML/CSS/JavaScript**: 客户端界面通常由HTML、CSS和JavaScript组成。HTML用于结构,CSS用于样式,JavaScript负责与WebSocket服务器交互。你可以...
它通过多种技术(如 WebSocket、Long Polling)进行降级处理,确保在各种浏览器和移动设备上都能实现低延迟、高可靠性的真实时通信。Socket.IO 提供了一套简单的 API,使得开发者可以轻松地在客户端和服务器之间建立...
Socket.IO提供了一种简单的方式来创建WebSocket服务器和客户端,同时在WebSocket不支持的浏览器或环境中回退到其他协议,如polling或long-polling。 **CSS基础** 虽然主要的技术焦点在于Socket和Node.js,但项目...
Socket.IO通过WebSocket、Long-Polling等不同的传输机制确保在各种网络环境中都能保持连接,同时提供了简单的API,让开发者可以轻松地在应用中添加实时功能。 **实时聊天室的构建步骤** 1. **安装依赖** 首先,你...
Socket.IO支持多种传输机制,如polling、long-polling等,确保即使在网络不稳定的情况下也能保持连接。在本项目中,Socket.IO作为客户端和服务器之间通信的桥梁,处理数据的发送和接收。 项目运行前,你需要确保...
Socket.IO 能够自动选择最优的传输方式(如 WebSocket、long-polling 等),并且能够在各种网络环境中工作。 3. **WebSocket 原理** - WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。WebSocket 连接是...
它封装了WebSocket协议和其他多种备选技术,如polling、long-polling等,确保在各种网络环境下都能提供可靠的实时通信。在"战城"克隆游戏中,Socket.IO扮演着至关重要的角色,负责处理客户端和服务器之间的数据交换...
基于HTTP的双向方式长度较长(long polling):直到消息入队或出队,服务器才会返回响应。未dequeue的消息位于内存中,实际的工作方式就是Golang的Channel。 受原理所限,此服务不能实现消息的可靠传递(reliable ...
这个示例使用SocketIO ,它不支持NodeJS模块cluster (它仍然可以工作,但是会回websocket long polling而不是websocket )。 生成证书并将其放置在certs文件夹( ./server/certs )中以进行本地开发。 如果您不...
Socket.IO的核心功能是它能够自动选择最佳的传输方式,如WebSocket、long-polling等,确保最佳性能和兼容性。 #### 二、项目初始化 - **创建项目目录**:首先创建一个名为`chatroom`的文件夹,作为项目的工作空间...
Socket.IO是一个实时应用框架,能够在浏览器和服务器之间建立持久的连接,支持多种传输方式,包括WebSocket、long polling等,确保数据在不同环境下的顺畅传输。在聊天应用中,Socket.IO负责维持客户端与服务器之间...
它的核心功能是解决各种浏览器兼容性问题,提供跨平台的WebSocket支持,并且在WebSocket不可用时可以自动回退到其他如Long Polling的技术,确保实时通信的可靠性。在气泡游戏中,Socket.IO使得玩家的动作能立即反映...
它能在多种浏览器和设备上工作,并自动在WebSocket、Long Polling等多种传输协议间切换。 6. **MySQL**:MySQL是一款关系型数据库管理系统,广泛应用于互联网应用,提供高速、稳定的数据存储和查询能力。 7. **...