socket.io 轮询 returns Laravel 500 NotFoundHttpException
socket.io polling returns 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
当然没有找到。我期待 socket.io 尝试创建一个 websocket 连接——而不是将长轮询 HTTP 请求发送到未定义的 Laravel 路由。我做错了什么?
你实际上不需要在这里表达,因为你没有显示任何东西,只是简单的 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
替换为您的脚本名称。
我正在尝试设置 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 连接——而不是将长轮询 HTTP 请求发送到未定义的 Laravel 路由。我做错了什么?
你实际上不需要在这里表达,因为你没有显示任何东西,只是简单的 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
替换为您的脚本名称。