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