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
。