Приложение чата с использованием socket.io не подключается при развертывании на рабочем сервере - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь реализовать приложение чата, используя nodejs и socket.io.Приложение работает на локальном хосте.Но когда я внедряю то же самое на моем производственном сервере, 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 / apichat http://127.0.0.1:3600

После всего этого соединение с сокетом не являетсяустановлено между сервером и клиентом.

В консоли браузера отображается ошибка:

POST https://www.mywebsite.com/apichat/?EIO=3&transport=polling&t=MUc-TJK 404 (не найден)

И на вкладке Сеть браузера отображается:

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

Я проверил много других вопросов, размещенных здесь и на других сайтах, но без вопросов обращайтесь к этой проблеме.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 20 июня 2019

Проблема, с которой вы сталкиваетесь, возможно, связана с включением ssl на вашем веб-сайте.Вам нужно передать связанные с ssl файлы в ваш файл app.js.Пример кода для этого следующий:

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, вам необходимо связаться с системным администратором или с хостинг-провайдером.

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...