【问题标题】:Simple Node.js chat program NOT using socket.io不使用 socket.io 的简单 Node.js 聊天程序
【发布时间】: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


【解决方案1】:

你听说过消息后端jxm.io吗?

它适用于JXcore(Node.JS 的开源分支)。 JXM 本身是一个开源项目,你可以在 github 上找到它:jxm

真的是又快又高效,你可以查一些tutorials。例如,以下是您需要在服务器端运行的最少代码:

var server = require('jxm');
server.setApplication("Hello World", "/helloworld", "STANDARD-KEY-CHANGE-THIS");
server.addJSMethod("serverMethod", function (env, params) {
   server.sendCallBack(env, params + " World!");
});
server.start(); 

客户的部分可以在这里找到: Browser Client (JavaScript)

JXM 还支持 Java 客户端(在 android 上运行)和节点客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2014-02-10
    • 2016-05-06
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多