Javascript 套接字io客户端网络::错误\u连接\u被拒绝

Javascript 套接字io客户端网络::错误\u连接\u被拒绝,javascript,angularjs,node.js,socket.io,Javascript,Angularjs,Node.js,Socket.io,我目前正在构建一个带有实时通知的todo应用程序 上下文 我用PHP(Laravel4)构建后端,用AngularJS(yeoman:GeneratorAngular)构建前端。这两个应用程序不在同一个域中(backend.herokuapp.com和frontend.herokuapp.com)。客户机通过公共API与服务器对话 我想向Angular应用程序添加实时通知,当用户创建新的todo时,我想在所有连接的浏览器上更新UI 服务器 我使用的是PHP和服务器的“发射器示例”。当点击MyAP

我目前正在构建一个带有实时通知的todo应用程序

上下文 我用PHP(Laravel4)构建后端,用AngularJS(yeoman:GeneratorAngular)构建前端。这两个应用程序不在同一个域中(backend.herokuapp.com和frontend.herokuapp.com)。客户机通过公共API与服务器对话

我想向Angular应用程序添加实时通知,当用户创建新的todo时,我想在所有连接的浏览器上更新UI

服务器 我使用的是PHP和服务器的“发射器示例”。当点击MyAPI的url时,PHP客户端在nodejs服务器上发出一个事件。这目前正在工作,但仅当服务器与PHP服务器位于同一个域中时

下面是Laravel应用程序的配置

+ app
    + controllers
        - AlertsController.php
+ push
    - server.js
AlertsController.php
class AlertsController extends ApiController
{
    public function index($userId = null)
    {
        $client = new Client(new Version1X('http://localhost:1337'));
        $client->initialize();
        $client->emit('broadcast', ['foo' => 'bar']);
        $client->close();
    }
}
server.js

var server = require('http').createServer(),
    io     = require('socket.io')(server),
    logger = require('winston'),
    port   = 1337;

// Logger config
logger.remove(logger.transports.Console);
logger.add(logger.transports.Console, {colorize : true, timestamp : true});
logger.info('SocketIO > listening on port ' + port);

io.on('connection', function (socket) {
    var nb = 0;

    logger.info('SocketIO > Connected socket ' + socket.id);

    socket.on('broadcast', function (message) {
        ++nb;
        console.log("broadcast !");
        logger.info('ElephantIO broadcast > ' + JSON.stringify(message));

        io.emit('alert.created', JSON.stringify(message));
    });

    socket.on('disconnect', function () {
        logger.info('SocketIO : Received ' + nb + ' messages');
        logger.info('SocketIO > Disconnected socket ' + socket.id);
    });
});

server.listen(port);
我通过
npm start
启动我的server.js文件。 我在用拉拉维尔的宅地

客户 我的客户在另一个应用程序上,所以我在我的bower文件中导入并包含在项目中。该文件已正确导入(在Chrome开发工具的网络面板中为200 OK)。 问题是,当我设置io连接时,控制台面板中出现了“GET net::ERR_connection_Rejected”

我正在使用Grunt创建一个Web服务器

下面是我在客户端文件中所做的操作:

var socket = io.connect("http://127.0.0.1:1337");
socket.on('alert.created', function (msg) {
    console.log("new alert created", msg);
});

有人知道问题出在哪里吗?这很奇怪,我可以在PHP和NodeJS之间建立连接,但不能在NodeJS服务器和JavaScript客户端之间建立连接。

好的,我找到了解决问题的方法

我从Homestead中移除了nodejs服务器,并在外面启动了它。 然后在我的Laravel应用程序中,我将127.0.0.1更改为我的ip地址

现在一切都好了


谢谢大家

我也有同样的问题。这是因为您使用的是虚拟机,需要显式显示端口转发

.homestad/
中编辑
homestad.yaml
,如下所示:

ports:
    - send: 1337
      to: 1337
      protocol: tcp

重新启动虚拟机,它将按预期工作。

因此这是安全/确认问题。您是否尝试设置允许所有传入请求的虚拟主机?参考:检查您的防火墙限制。@VasiliyBorovyak很抱歉,我不知道如何执行此操作。仍然不理解为什么127.0.0.1不工作,我的IP地址工作。