使用 Node.js 在 Amazon Linux AMI 上设置 websocket 服务器

使用 Node.js 在 Amazon Linux AMI 上设置 websocket 服务器

几天来,我在尝试在 Amazon EC2 实例上设置一个简单的 websocket 服务器时遇到了问题。我使用的是 Linux 的微型实例。首次启动后,我更新了所有操作系统软件包,按照这个很棒的指南安装 node 和 npm,安装了 socket.io、express(目前未使用)和包含 websocket-server 的 websocket.io来自 miksago

首先,我尝试使用 Socket.io 作为后端。我使用他们网站上的示例代码(如下所示)设置了一个简单的服务器。我用 运行它sudo node server.js。我使用 sudo 以便可以监听端口 80,否则会导致错误。从这里,我将我的亚马逊公共 DNS 放入 websocket.org echo 测试的位置字段中。当我按下连接时,我的服务器将输出debug - destroying non-socket.io upgrade。我在“连接”侦听器中有一个从未打印过的控制台输出,因此似乎在连接请求通过之前存在错误。可能我必须使用 socket.io 客户端才能使 socket.io 服务器工作,但我找不到任何明确的答案。

我第二次尝试使用 Miksago 的 websocket-server。下面我还会列出服务器的源代码。这一次,我能够在连接请求上看到控制台输出,但连接仍然没有建立。我尝试打印 connection.header 对象,但收到错误。

我正在尝试设置一个简单的服务器,只是为了完成基本操作,但我无法确定问题是什么。我使用 websocket.org 来测试服务器,因为他们的客户端设置正确。我在设置服务器时做错了什么?

Socket.io server
var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  console.log("Connection request on socket.io server");
});



Websocket-Server
var ws = require("websocket-server");

var server = ws.createServer();

server.addListener("connection", function(connection){
  console.log("Connection request on Websocket-Server");
});

server.listen(80);

编辑:node-websocket-server 的调试输出。这是输出的片段,console.log(connection._req);信息看起来正确,但服务器根本没有建立连接。

httpVersion: '1.1',
complete: true,
headers: 
 { upgrade: 'websocket',
   connection: 'Upgrade',
   host: 'ec2-50-16-107-223.compute-1.amazonaws.com',
   origin: 'http://websocket.org',
   'sec-websocket-key': 'HdgJaiL2TZ4iyOHTarmlig==',
   'sec-websocket-version': '13' },
trailers: {},
readable: true,
url: '/',
method: 'GET',
statusCode: null,

编辑2:使用 websocket.io 作为 Node.js 上的 websocket 服务器。它无需客户端 js 文件即可工作,并且更符合规范。它可通过 npm 和 git 获得。

答案1

根据这个 StackOverflow 问题,您必须使用 socket.io 的客户端代码。使用 websocket.org 的客户端代码将导致此错误。

相关内容