如何在heroku上与nodejs服务器建立远程websocket连接

时间:2016-11-29 15:18:13

标签: javascript node.js heroku websocket socket.io

我正在尝试通过websocket连接连接到nodejs服务器,但无法正常工作。

我的server.js看起来像这样:

var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io', {
    transports: ['websocket']
})(http);

var server_port = process.env.PORT || 8080
var server_ip_address = process.env.IP || '0.0.0.0'

app.listen(server_port, server_ip_address, function () {
    console.log('listening on ' + server_ip_address + ":" + server_port);
});

我的client.js(在运行nodejs的树莓派上运行)是:

var io = require('socket.io-client');
var socket = io.connect('http://<app-url>',
    {
        reconnect: true,
        transports: ['websocket']
    }
);

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

我也尝试过openshift v2(端口8000和8443)和v3而没有运气。

如果有人最近这样做,请告诉我,谢谢!

调试客户端时,我收到消息:

  

engine.io-client:socket socket close,原因是:“transport error”

并在服务器上:

  

heroku [router]:at = error code = H13 desc =“连接无响应”

2 个答案:

答案 0 :(得分:1)

好的,它现在正在运作。我修改了heroku docs

中的示例

我不太清楚为什么我的服务器配置不起作用,但以下工作正常:

server.js

var express = require('express');
var socketIO = require('socket.io');
var path = require('path');

var PORT = process.env.PORT || 3000;

var app = express();
var server =  app.listen(PORT, () => console.log(`Listening on ${ PORT }`));

var io = socketIO(server);

io.on('connection', (socket) => {
    console.log('Client connected');
    socket.on('disconnect', () => console.log('Client disconnected'));
});

client.js(xShirase说我需要正确的路径......)

var io = require('socket.io-client');
var socket = io.connect('https://<url>',
    {reconnect: true, transports : ['websocket'], path: '/socket.io'});

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

答案 1 :(得分:0)

看起来有时会出现一个奇怪的错误,您应该可以通过在选项中添加客户端库的路径来完成这样的操作:

var socket = io.connect('http://<app-url>:8080',
    {
        reconnect: true,
        transports: ['websocket'],
        path: "/lib/socket.io.js"  //use the relevant path for your file
    }
);

但是你似乎仍在使用默认选项,所以你可以这样做:

var socket = io.connect();
相关问题