【问题标题】:socket.io polling returns Laravel 500 NotFoundHttpExceptionsocket.io 轮询返回 Laravel 500 NotFoundHttpException
【发布时间】:2016-02-15 17:47:45
【问题描述】:

我正在尝试设置 node.js socket.io 服务器,但它不工作。似乎它正在尝试首先轮询 node.js 服务器,但因为我在我的大部分应用程序中使用 Laravel,所以将其拾取并返回 Not FoundHttpException

Node.js 服务器代码:

var app = require('express')();
var server = require('http').Server(app);

var io = require('socket.io')(server);

var redis = require('ioredis');
var Redis = new redis();

Redis.subscribe('live-updates');

Redis.on('message', function(channel, message) {
    message = JSON.parse(message);

    console.log(channel, message);
    io.emit('foo', message.data);
});

io.on('connection', function() {
    console.log('foo');
});

客户端代码:

var socket = io.connect('http://myapp.app');

socket.on('foo', function(data) {
    console.log(data);
});

这一切都会在我的客户端触发以下 HTTP 长轮询请求:

http://myapp.app/socket.io/?EIO=3&transport=polling&t=1447468676627-0

回应:

Server 500 error, #29 Symfony\Component\HttpKernel\Exception\NotFoundHttpException in /home/vagrant/myapp/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:161

当然没找到。我期待 socket.io 尝试创建一个 websocket 连接 - 不向未定义的 Laravel 路由发送长轮询 HTTP 请求。我做错了什么?

【问题讨论】:

  • 我对节点有点陌生,但您似乎没有在脚本末尾将节点服务器绑定到任何端口,也没有在客户端 JS 中指代一个端口

标签: php node.js sockets laravel socket.io


【解决方案1】:

这里实际上不需要 express,因为你没有显示任何东西,只是简单的 http 服务器。 我认为你的问题,服务器不听。

节点还应该监听 80 以外的端口,否则你的 http 服务器将处理请求并导致 500 错误。

检查下面的代码。

服务器端

var app = require('http').createServer(handler);
var io = require('socket.io')(app);

app.listen(3000);

客户端

var socket = io('http://localhost:3000');

确保从 CLI 运行节点

node index.js

并将index.js 替换为您的脚本名称。

【讨论】:

  • 变量handler是什么?
  • 对不起,您能否详细说明一下,变量处理程序是什么意思?
猜你喜欢
  • 2014-09-30
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2016-09-02
  • 2020-12-09
  • 2014-12-11
  • 2016-12-02
相关资源
最近更新 更多