【问题标题】:Using sockets with express in production environment(heroku)在生产环境中使用带有 express 的套接字(heroku)
【发布时间】:2020-06-23 11:49:56
【问题描述】:

在使用 localhost 时,我使用以下代码来实现套接字功能-

服务器端

var express = require('express');
var app = express();
const io = require('socket.io')(5000);

客户端

<script src="http://localhost:5000/socket.io/socket.io.js"></script>
<script>const socket = io.connect('http://localhost:5000');</script>

上面的代码在本地对我来说很好用。之前尝试使用官方文档中给出的代码,但没有成功。尝试加载 socket.io.js 文件时出现 404 错误,它在客户端显示“io is not defined”。该代码如下 -

服务器端

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

客户端

<script src="/socket.io/socket.io.js"></script>
<script>var socket = io.connect('http://localhost');</script>

现在我需要将应用程序部署到 Heroku,但不知道如何执行套接字功能。我尝试了上述两种方法,但在 Heroku 中都没有。我收到“404 错误”和“io 未定义”。服务器端代码用 ./app.js 编写,客户端代码用 ./public/index.html 编写。

如何让这个套接字功能在 Heroku 中工作,以及为什么官方代码甚至不能在本地工作?

【问题讨论】:

    标签: node.js express heroku socket.io


    【解决方案1】:

    试图让同样的事情正常工作,没有所有答案,但在 heroku 上,你需要从环境变量中获取端口。

    // Needed for Heroku serving
    if (process.env.PORT > 0)
        port = process.env.PORT;
    else
        port = 5000;
    
    // create the express server (app) and the socket io server (io)
    const app = express();
    const server = app.listen(port, () => {
        console.log("Listening on port: " + port);
    });
    const io = require('socket.io')(server);
    

    客户端

    const socket = socketIOClient('APPNAME.herokuapp.com:80');
    socket.emit("MsgType", "Payload") 
    

    【讨论】:

    • 客户端应该写什么?
    猜你喜欢
    • 2019-12-23
    • 2022-07-24
    • 1970-01-01
    • 2021-03-10
    • 2018-08-25
    • 2021-03-10
    • 2014-03-06
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多