背景:我有一个运行在本地主机上的 node.js 服务器(称之为 A 服务器),和一个运行 node.js 的外部服务器,地址是 https://example.net:3000(称之为 B 服务器)。我无法控制或访问 B 服务器(它是我家里的物联网设备的仪表盘站点),但我需要使用 socket.io 连接到它并发送特定的消息。
我可以轻松地从一个扁平的 javascript 文件(客户端)连接到它,但需要在服务器端运行它(最终目标是将其变成可以通过 HTTP 请求调用的东西);像如何使用 WebSockets 连接两个 node.js 服务器?之类的示例表明,我应该能够使用来自 node.js 的 socket.io-client 几乎相同的代码来实现相同的结果。但当我从 node.js 运行代码时,无法连接到套接字。
以下是在扁平 javascript 文件中成功运行的代码。我知道它有效,因为我在控制台中看到 'socket connect',并且我还可以测试套接字发射是否有效。
我可以轻松地从一个扁平的 javascript 文件(客户端)连接到它,但需要在服务器端运行它(最终目标是将其变成可以通过 HTTP 请求调用的东西);像如何使用 WebSockets 连接两个 node.js 服务器?之类的示例表明,我应该能够使用来自 node.js 的 socket.io-client 几乎相同的代码来实现相同的结果。但当我从 node.js 运行代码时,无法连接到套接字。
以下是在扁平 javascript 文件中成功运行的代码。我知道它有效,因为我在控制台中看到 'socket connect',并且我还可以测试套接字发射是否有效。
var myemail = "email@gmail.com";
var device_id = '12345';
// Create SocketIO instance, connect
var socket = io.connect('https://example.net:3000');
socket.on('connect', function(){
try {
console.log('socket connect');
socket.emit('configure', {email:myemail, deviceid:device_id});
} catch(e) {
console.log(e);
}
});
socket.emit("/" + device_id, "45678");
以下是我在运行node.js实例时无法正常工作的代码。 我期望在命令行日志中收到一个“socket connect”的消息,但什么也没得到。
var express=require('express');
var http=require('http');
var app=express();
var server = http.createServer(app);
//Variables
var myemail = "email@gmail.com";
var device_id = '12345';
var io = require('socket.io-client');
var socket = io.connect('https://example.net:3000');
//Connect listener
socket.on('connect', function(){
try {
console.log('socket connect');
socket.emit('configure', {email:myemail, deviceid:device_id});
} catch(e) {
console.log(e);
}
});
socket.emit("/" + device_id, "45678");
有什么想法吗?
更新
运行调试工具,结果作为下面链接的图像显示。我看到的关键是engine.io尝试进行xhr轮询,并从服务器得到503响应。(显然这不是一个真正的与服务器相关的临时错误,因为在chrome中运行客户端js可以正常工作)。