【发布时间】:2017-08-17 16:01:30
【问题描述】:
我有一个 NodeJS 网络应用程序正在运行。我有一个 WebSocketServer 正在运行。我可以通过客户端机器上的 javascript 建立的 WebSocket 连接与我的应用程序进行通信。这是相关的nodejs服务器端代码sn-p:
var WebSocket = require('ws');
var WebSocketServer = require('ws').Server;
var server = app.listen(process.env.VCAP_APP_PORT || 3000, function () {
console.log('Server started on port: ' + server.address().port);
});
wss.on('connection', function (ws) {
ws.on('message', function (message, flags) {
if (flags.binary) {
var value1 = message.readDoubleLE(0);
var value2 = message.readInt16LE(8);
var value3 = message.readInt8(10);
//message.writeDoubleLE(8.5,0);
ws.send(message, {
binary: true
});
} else {
if (message == "injest") {
ws.send("requested: " + message);
} else if (message == "something") {
wss.clients[0].send('server side initiated call');
} else {
ws.send("received text: " + message);
}
}
});
// ws.send('something'); // Sent when connection opened.
});
所以你看,一切都很简单。
这是我的问题。如何从服务器端应用程序本身的 NodeJS 代码访问此 WebServer?
我尝试了以下方法:
var ws = new WebSocket("ws://localhost:443");
ws.on('message', function (message) {
wss.clients[0].send('server side initiated call 1 ');
});
ws.on('close', function (code) {
wss.clients[0].send('server side initiated call 2 ');
});
ws.on('error', function (error) {
wss.clients[0].send(error.toString());
});
ws.send("k");
错误函数由 ECONNREFUSED 127.0.0.1:443 触发。
我在设置服务器时没有指定端口。如果我这样做了,那么从我的客户端 html 页面调用服务器失败。
简而言之,如何在 NodeJS 中设置 WebSocket 客户端以访问在该应用程序中创建的 WebSocketServer?
【问题讨论】:
-
您能否为您的问题选择一个更有意义的标题?标签已经表明这是一个 node.js 和 webSocket 问题。您的标题应该为问题的内容提供一些背景信息。
-
为什么要连接端口 443?您的服务器似乎在某个不同的端口上运行。您需要指定服务器实际运行的端口。而且,请记住,在连接到 localhost 时,连接不会通过您的托管服务提供商的任何基础设施(代理等),因此您必须连接到服务器进程正在运行的实际端口。
-
感谢您的回答。正如我所说,我尝试为 websocket 服务器指定一个端口,但随后我的客户端调用停止工作。如何查询 WebSocketServer 对象以获取它正在运行的端口?此外,您是否希望该地址与我在客户端 javascript 中使用的地址相匹配,而不是本地主机,即类似 wss://mywebpaceaddress.whatever.endpoint 的地址?我试过了,但没有用。
-
我猜您正在托管环境中运行,并且端口 80 上到您的域的传入连接映射到其他端口。当您直接连接到 localhost 时,不会发生该映射,因为您绕过了与您的域的连接所经过的正常基础设施。如果您想要该映射,请连接到您的域,而不是本地主机。
-
感谢大家的建议。仍然无法让它工作。我已经简化了问题并重新发布,希望有人可以帮助我。