php - socket.io 轮询返回 Laravel 500 NotFoundHttpException

标签 php node.js sockets laravel socket.io

我正在尝试设置一个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 请求。我做错了什么?

最佳答案

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

Node 还应该监听 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

node index.js

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

关于php - socket.io 轮询返回 Laravel 500 NotFoundHttpException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33704717/

相关文章:

javascript - Cloud Functions for Firebase - 序列化返回值 : 时出错

javascript - Laravel -/js/app.js 未找到 404 错误

PHP、Python 处理还是 MySQL 处理大型日期集?

php - 需要帮助将调查响应从 HTML 表单传递到 MySQL 表

php - cron 运行使用 shell_exec 和 redis-cli 的 php 文件

node.js - 如何在环回 4 mongoDB 中使模型属性唯一?

node.js - nodejs-opencv的性能

c - select() 如何监控套接字?

android - 访问 NATed HTTP 服务器

c - 使用 netlink 从旧内核上的套接字获取 inode