[英]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.