【问题标题】:Nginx HTTP and 2 TCP on port 80端口 80 上的 Nginx HTTP 和 2 个 TCP
【发布时间】:2017-08-18 09:59:58
【问题描述】:

我正在做一些事情,我有两个 websocket,一个用于客户端,一个用于服务器,正在与端口 3000 的 HTTP 节点服务器一起使用,我在这里做错了吗?或者这不可能?

nginx 配置:

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://localhost:3000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    location /ws/ {
        proxy_pass http://localhost:8000/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

}

api.js

import openSocket from 'socket.io-client';
const  socket = openSocket('ws://example.com/ws');

function roomSubscribe(roomId, cb) {
    socket.on('roomInfo', data => cb(null, data));
    socket.emit('getRoom', {'roomId': roomId});
}

function sendMessage(content) {
    socket.emit('sendMessage', content);
}

export { roomSubscribe, sendMessage };

【问题讨论】:

  • 它们可以在同一个端口上运行

标签: node.js nginx websocket socket.io


【解决方案1】:

我认为你应该做一些修改: 删除location中的升级设置/

请注意,您请求的路径是 /ws,但 nginx.conf 中的位置正则表达式是 /ws/。保持不变。

使用它来获取套接字:

socket = openSocket("ws://example.com/ws/", {transports: ['websocket']})

添加此代码,查看ws连接是否建立。

socket.on('connect', function () {
  console.log('connected!');
});

【讨论】:

  • 端口 3000 进入我的 App/http,端口 8000 进入我的服务器
  • 然后在位置/,不要使用升级。它用于 ws 连接构建。
  • 我仍然收到这两个错误:websocket.js:6 WebSocket connection to 'ws://example.com/sockjs-node/063/fabw334n/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400http://example.com/socket.io/?EIO=3&transport=polling&t=LttlOsD 404 (Not Found)
  • 什么? openSocket 就是我所说的 socket.io-client
  • 你在说什么?当然 openSocket 不在那里,我将 socket.io-client 分配给变量 openSocket
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2012-01-21
  • 1970-01-01
  • 2017-11-19
  • 2014-06-03
  • 2021-04-26
相关资源
最近更新 更多