【发布时间】:2015-06-17 15:04:37
【问题描述】:
我正在尝试学习 Node 并构建一个简单的聊天应用程序。似乎每个人都使用 socket.io。我想了解如何使用 get 和 post 在更基础的层面上做到这一点。
基本上,我想做的只是有一个表单,它接受输入并将其重新发布到表单下方供所有人查看。
这是我目前所拥有的:
//Requirements
var express = require('express');
var app = express();
//GET
app.get('/', function (req, res) {
// res.send('Hello World!');
var response =
"<HEAD>"+
"<title>Chat</title>\n"+
"</HEAD>\n"+
"<BODY>\n"+
"<FORM action=\"/\" method=\"get\">\n" +
"<P>\n" +
"Enter a phrase: <INPUT type=\"text\" name=\"phrase\"><BR>\n" +
"<INPUT type=\"submit\" value=\"Send\">\n" +
"</P>\n" +
"</FORM>\n" +
"<P>phrase</P>\n"+
"</BODY>";
var phrase = req.query.phrase;
if(!phrase){
res.send(response);
}else{
res.send(response);
res.send(phrase);
}
});
//For testing
app.get('/test', function(req, res){
res.send('I am a robot');
console.log('told visiter I am a robot');
});
//Run the app
var server = app.listen(8080, function () {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
});
我一直在尝试很多事情,但我很困惑。
【问题讨论】:
-
获取和发布仅回发或将结果返回给请求它的客户,而不是全部。您需要 Web 套接字将响应发送给每个人,而 socket.io 是最擅长的。
-
有没有办法让节点用结果更新html?还是需要刷新页面?
-
除了套接字之外,还有其他方法可以将数据推送到连接的客户端。使用 http 模块编写 EventSource (SSE) 服务器很简单,可以延迟 http 返回的响应,甚至可以使用 comet 或 jsonp 长轮询。或者,就像所有的 php 聊天脚本一样,直接进行投票……
-
dandavis 描述的方法,例如长轮询和锤子轮询(至少有一些)专门用于绕过 http 的传统请求响应限制。每个人都使用 socketio 可能有一个很好的理由:)
-
我会推荐 EventSource 开始。这是一种即时将数据推送到客户端的始终在线方式。由于 http 可以随时推送到服务器,因此您只需要单向实时连接 (S->C)。一个简单的节点实现 sn-p 进入现有的基于 http 的脚本:jsfiddle.net/Lr9omhts/1 那么客户端非常简单,请参阅文档以获取示例。
标签: javascript node.js livechat