使用socket.io聊天应用程序在生产服务器上部署时未连接



我正在尝试使用nodejs和socket.io实现聊天应用程序。该应用程序在localhost上工作。但当我在生产服务器上部署相同的时,socket.io就无法进行任何连接。

server.js 的代码

var express = require('express');
var app = express();
var socket = require('socket.io');
var chat_controller = require('./controllers/ChatController.js');
var user_controller = require('./controllers/UserController.js');
var Group_controller = require('./controllers/GroupChatController.js');
app.get('/search', function (req, res) {
user_controller.get(req, res);
});
app.get('/groupSearch', function (req, res) {
user_controller.get(req, res);
});
var server = app.listen(3600, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
});
var io = socket(server);
io.on('connection', (socket) => {
console.log('made socket connection', socket.id);
socket.broadcast.emit('userconnected');
chat_controller.respond(io, socket);
Group_controller.respond(io, socket);
user_controller.respond(io, socket);
});
io.on('disconnect', function () {
console.log('made socket disconnect', socket.id);
});

client.js 代码

var socket = io.connect('https://www.mywebsite.com', {
path: '/apichat'
});
/* Other events related to socket. */

由于我的服务器使用SSL,我不能直接使用IP:PORT,所以我使用ProxyPass作为

ProxyPass/apichathttp://127.0.0.1:3600

在所有这些之后,服务器和客户端之间仍然没有建立套接字连接。

浏览器控制台中显示的错误为:

岗位https://www.mywebsite.com/apichat/?EIO=3&transport=轮询&t=MUc TJK 404(未找到(

在浏览器的"网络"选项卡中,它显示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>

我已经检查了许多其他问题张贴在这里和其他网站,但没有问题解决这个问题。

请帮忙。

您遇到的问题可能是由于您的网站上启用了ssl。您需要在app.js文件中传递与ssl相关的文件。示例代码如下:

var fs = require('fs');
var options = {
key: fs.readFileSync('PATH_TO_SSL_KEYS.key'),
cert: fs.readFileSync('PATH_TO_SSL_CERTS.crt'),
ca: fs.readFileSync('PATH_TO_SSL.pem')
};
var app = require('https').createServer(options, handler), io = require('socket.io').listen(app);
io.set('transports', [ 
'websocket', 
'flashsocket', 
'htmlfile', 
'xhr-polling', 
'jsonp-polling', 
'polling'
]);
function handler(req, res) {
res.writeHead(200);
res.end("welcome sir!");
}
var chat_controller = require('./controllers/ChatController.js');
var user_controller = require('./controllers/UserController.js');
io.sockets.on('connection', function (socket) {
socket.broadcast.emit('userconnected');
chat_controller.respond(io, socket);
user_controller.respond(io, socket);
socket.on('message', function (data) {
socket.broadcast.emit('message', data);
});
});  
io.on('disconnect', function (socket) {
console.log('made socket disconnect', socket.id);
});
app.listen(3300);

尝试按照上面提到的示例代码编辑您的应用程序文件,然后尝试使用它。如果您无法获得ssl相关文件的路径,则需要联系您的系统管理员或主机提供商。

我希望它能有所帮助。

最新更新