簡體   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