部署后 Socket io 不工作
Posted
技术标签:
【中文标题】部署后 Socket io 不工作【英文标题】:Socket io not working after being deployed 【发布时间】:2018-06-02 12:41:04 【问题描述】:我没有收到错误消息,但当我在 Linode 中部署我的应用程序时,io.on('connection', function(socket)
console.log('a user connected', socket.client.id);
);
似乎不起作用。
但在开发中它运行良好。
server.js (socket io)
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = 8002;
io.on('connection', function (socket)
console.log('a user connected', socket.client.id); // triggering in the development
);
http.listen(port, function ()
console.log('Express server listening on port ' + port);
console.log('env = ' + app.get('env') +
'\n__dirname = ' + __dirname +
'\nprocess.cwd = ' + process.cwd());
);
客户端 html (注意:我将 localhost 更改为我的网络应用程序 ip)
<script src="http://localhost:8002/socket.io/socket.io.js"></script>
我的应用程序似乎正在使用 socket.io polling-xhr.js
我对此有点陌生。
【问题讨论】:
在您的生产环境中,您使用的是url中的端口吗?也许它期望 socket.io 在端口 80 上。 @Porlune 我的服务器正在监听 port 8002 但我的应用程序正在 port 82 上运行 您可以设置它,以便您的 express 应用使用与 socket.io 相同的 http 服务器。以这种方式进行设置,然后请让我们知道它是否有效。 如果不想在同一个http服务器上设置socket.io,可以使用:socket.connect('localhost:8002');在客户端手动设置套接字 io 主机。 @Porlune 你能发表你的想法作为答案,这样我就可以正确地关注你了。 【参考方案1】:我不知道这是否会解决您的特定问题,但为了在您的应用程序使用的同一端口上设置 socket.io,您可以这样配置它:
const express = require('express');
const app = express();
const http = require('http');
const hostname = 'localhost';
const port = 80;
// the express app is registered with the server
const server = http.createServer(app);
// setup socket.io and register it with the server
const io = require('socket.io').listen(server);
// tell the application to listen on the port specified
server.listen(port, hostname, function (err)
if (err)
throw err;
console.log('server listening on: ', hostname, ':', port);
);
现在 socket.io 与您的应用程序在同一个端口上运行。
【讨论】:
以上是关于部署后 Socket io 不工作的主要内容,如果未能解决你的问题,请参考以下文章
Socket.io 在 localhost 上工作,但在部署 heroku 后无法工作?
socket io连接在localhost中正常工作,但在heroku服务器上部署时却没有
如何将 socket.io 部署到 Google App Engine?
Heroku Node.js + Socket.io:部署到 Heroku 后,我得到一个 ERR_CONNECTION_REFUSED