socket.io轮询返回Laravel 500 NotFoundHttpException

我试图设置一个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

那当然没有find。 我期望socket.io尝试创build一个websocket连接 – 不发送长轮询HTTP请求到一个未定义的Laravel路由。 我究竟做错了什么?

你不需要在这里expression,因为你不显示任何东西,只是简单的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 

并用您的脚本名称replaceindex.js