繁体   English   中英

套接字io客户端网:: ERR_CONNECTION_REFUSED

[英]socket io client net::ERR_CONNECTION_REFUSED

我目前正在构建具有实时通知的待办事项应用程序。

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

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

服务器我正在将https://github.com/Wisembly/elephant.io用于PHP和“发射器示例”的服务器。 当点击我的API的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文件。 我正在将Homestead用于Laravel。

客户端我的客户端在另一个应用程序上,因此我在我的Bower文件中导入了https://github.com/automattic/socket.io-client并包含在项目中。 此文件已正确导入(Chrome开发工具的网络面板中为200 OK)。 问题是当我设置io连接时,控制台面板中有“ GET http://127.0.0.1:1337/socket.io/?EIO=3&transport=polling&t=1426617086753-0 net :: ERR_CONNECTION_REFUSED”。

我正在使用Grunt创建网络服务器。

这是我在客户端文件中所做的:

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地址。

现在一切正常。

多谢你们 !

我只是有同样的问题。 这是因为您正在使用虚拟机,并且需要显式端口转发。

.homestead/ ,如下编辑Homestead.yaml

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

重新启动您的VM,它应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM