为了简短起见,但是我无法注册从前端应用程序到我的socket.io服务器的连接。
我一直在尝试在localhost上进行测试,但没有收到连接消息。我能够连接它的唯一方法是单独运行express应用程序(不使用nginx反向代理),并使用io('https://localhost:3000/socket.io')
我正在使用docker compose来构建所有内容并将其很好地打包,但是出于后期的目的,我并未将其包括在内。
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name ryangillie.com www.ryangillie.com;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://api:3000;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
}
location /socket.io {
proxy_pass http://api:3000;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
}
}
}
服务器index.ts
import cookieParser from 'cookie-parser';
import cors from 'cors';
import express from 'express';
import http from 'http';
import helmet from 'helmet';
import logger from 'morgan';
import socketIO from 'socket.io';
import apiRouter from './routes/api';
const app = express();
const server = http.createServer(app);
const io = socketIO(server);
app.set('trust proxy', 1);
app.use(helmet());
app.use(cors());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use('/api', apiRouter);
app.use((req, res) => res.status(404).json({
status: 404,
message: 'Not found',
}));
io.on('connection', (socket) => {
console.log('User connected');
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
const PORT = Number(process.env.PORT) || 3000;
server.listen(PORT, () => console.log(`Server running on port: ${PORT}`));
测试index.ts
import io from 'socket.io-client';
const socket = io(/* Confused Here? */)
在测试文件中,我尝试执行io()
,io('http://localhost)
,io(http://localhost/socket.io)
,但似乎没有任何效果。任何帮助将不胜感激