当前位置: 首页 > 面试题库 >

Node.js + Socket.io + Apache

袁弘化
2023-03-14
问题内容

我正在寻找一种通过以下方式集成Node.js + Socket.io + Apache的方法:我希望apache继续提供HTML /
JS文件。我希望node.js侦听端口8080上的连接。如下所示:

var util = require("util"),
    app = require('http').createServer(handler),
    io = require('/socket.io').listen(app),
    fs = require('fs'),
    os = require('os'),
    url = require('url');

app.listen(8080);

function handler (req, res) {

    fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });

  socket.on('my other event', function (data) {
    socket.emit('ok 1', { hello: 'world' });
  });

  socket.on('clientMSG', function (data) {
    socket.emit('ok 2', { hello: 'world' });
  });

});

如果我访问连接到该服务器的HTML,它可以工作,但是我需要转到mydomian.com:8080/index.html。我想要的是能够去mydomian.com/index.html。并能够打开套接字连接:

<script>
        var socket = io.connect('http://mydomain.com', {port: 8080});
        socket.on('news', function (data) {
            console.log(data);
            socket.emit('my other event', { my: 'data from the client' });
        });

        socket.on('connect', function (data) {
            console.log("connect");
        });

        socket.on('disconnect', function (data) {
            console.log("disconnect");
        });


            //call this function when a button is clicked
        function sendMSG()
        {
            console.log("sendMSG"); 
            socket.emit('clientMSG', { msg: 'non-scheduled message from client' });
        }

    </script>

在此示例中,当我转到URL的端口8080时,我必须使用不会工作的fs.readFile。

有什么建议?Tks。


问题答案:

从Apache端口80提供静态内容,并在端口8080上的Socket.IO服务器上提供动态/数据内容app = require('http').createServer(handler)。Socket.IO应用程序中不需要

Apache端口80 | ------------- | 客户| ------------ | Socket.IO端口8080

var io = require('socket.io').listen(8080);

io.sockets.on('connection', function (socket) {
  io.sockets.emit('this', { will: 'be received by everyone'});

  socket.on('clientMSG', function (from, msg) {
    console.log('I received a private message by ', from, ' saying ', msg);
  });

  socket.on('disconnect', function () {
    sockets.emit('user disconnected');
  });
});


 类似资料:
  • 问题内容: 我尝试使用HTML5 Canvas,JavaScript(太使用John Resig简单继承库)和带有Socket.IO的Node.js创建简单的多人游戏。我的客户代码: 和服务器代码: 当我运行两个客户端时,第一个客户端可以移动第二个客户端Rect,第二个客户端可以移动第一个客户端rect,第三个客户端可以移动第一个和第二个客户端rect。 我有疑问如何创建真正的多层播放器?像这样:

  • 我试图使用Cloudflare为CDN/保护运行带有Node.js+Socket.io的Apache,但是出了问题。 我用来在node.js上创建服务器的代码是 我实际上是在使用ProxyPass来处理子域“API”。传递给node.js/express: 这是工作的,但webosocket不是。没有Apache(直接在Express上运行),所有工作都很好,包括WebSocket。但是,我也需要

  • 问题内容: 我正在尝试使用我的SSL证书运行socket.io,但是它将无法连接。 我基于聊天示例创建代码: 如果我删除SSL代码,它运行正常,但是与此同时,我收到了一个请求,请求http://domain.com/socket.io/1/?t=1309967919512 请注意,它没有尝试使用https,这会导致它失败。 我正在测试chrome,因为它是该应用程序的目标浏览器。 抱歉,这是一个简

  • 问题内容: 我希望让Socket.io 在Node.js v.0.6.0及更高版本中与本机负载平衡(“集群”)一起工作。 据我了解,Socket.io使用Redis存储其内部数据。我的理解是:不是要为每个工作人员生成一个新的Redis实例,而是要强制这些工作人员使用与主服务器相同的Redis实例。因此,连接数据将在所有工作人员之间共享。 像这样的主人: 我们必须以某种方式传递给工人并执行以下操作:

  • 我用Node.js设置了Socket.io,它通过侦听/连接到端口8000(或另一个不是服务器运行端口的端口)在本地开发机器上工作。 当我试图在heroku上做同样的事情时,客户端脚本导入失败了。 我尝试过相对路径 编辑:我实际上是在使用geddy mvc框架,我想让它在heroku上如何设置(基本上就像socket.io一样),我发现这个答案让我看起来可以类似地使用它:GeddyJS&socke

  • 我要把我的代码移到服务器上。这段代码可以在我在localhost上设置的自己的服务器上完美地运行和呈现数据库信息,但是当我从服务器上运行代码时,index.html中会显示一个错误,说明“IO没有定义”。无论出于什么原因,socket.io都无法被识别。此外,如果我在浏览器中键入localhost:3000,则不会显示任何内容。任何帮助都将不胜感激。 我有两个文件,server.js和index.