客户端在 socket.io 上接收轮询
Client side receive polling on socket.io
我的服务器上有以下代码
var socket = require( 'socket.io' );
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = socket.listen( server );
var port = process.env.PORT || 3000;
server.listen(port, function () {
console.log('Server listening at port %d', port);
});
io.on('connection', function (socket) {
socket.on( 'new_count_message', function( data ) {
io.sockets.emit( 'new_count_message', {
new_count_message: data.new_count_message
});
});
socket.on( 'update_count_message', function( data ) {
io.sockets.emit( 'update_count_message', {
update_count_message: data.update_count_message
});
});
socket.on( 'new_message', function( data ) {
io.sockets.emit( 'new_message', {
name: data.name,
email: data.email,
subject: data.subject,
created_at: data.created_at,
id: data.id
});
});
});
但控制台并未显示 "update_count_message",而是记录了连续的轮询流。
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081140-15
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850080247-12
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850080252-13
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081252-16
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081290-17
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081351-18
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081416-19
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081474-20
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081532-21
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081576-22
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081651-23
我该如何解决这个问题?
我不想在浏览器中收到循环。
browser/socket 没有连接到 NodeJS。 NodeJS 不是 运行ning,或者您正在尝试连接到错误的端口 - 在您的情况下,它看起来像是在尝试连接到端口 80。如果您已经在端口上安装了 Apache 运行ning 80,你不能 运行 NodeJS 和 Apache 都在同一个端口上,除非你在 httpd.conf.
中设置反向代理
您可以按照此处的调试说明查看 SocketIO 可能为您提供的更多描述性错误:
http://socket.io/docs/logging-and-debugging/
您也可以在浏览器中转到这个 URL 并查看它试图连接到哪个页面:
我的服务器上有以下代码
var socket = require( 'socket.io' );
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = socket.listen( server );
var port = process.env.PORT || 3000;
server.listen(port, function () {
console.log('Server listening at port %d', port);
});
io.on('connection', function (socket) {
socket.on( 'new_count_message', function( data ) {
io.sockets.emit( 'new_count_message', {
new_count_message: data.new_count_message
});
});
socket.on( 'update_count_message', function( data ) {
io.sockets.emit( 'update_count_message', {
update_count_message: data.update_count_message
});
});
socket.on( 'new_message', function( data ) {
io.sockets.emit( 'new_message', {
name: data.name,
email: data.email,
subject: data.subject,
created_at: data.created_at,
id: data.id
});
});
});
但控制台并未显示 "update_count_message",而是记录了连续的轮询流。
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081140-15
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850080247-12
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850080252-13
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081252-16
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081290-17
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081351-18
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081416-19
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081474-20
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081532-21
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081576-22
GET http://localhost/socket.io/?EIO=3&transport=polling&t=1448850081651-23
我该如何解决这个问题? 我不想在浏览器中收到循环。
browser/socket 没有连接到 NodeJS。 NodeJS 不是 运行ning,或者您正在尝试连接到错误的端口 - 在您的情况下,它看起来像是在尝试连接到端口 80。如果您已经在端口上安装了 Apache 运行ning 80,你不能 运行 NodeJS 和 Apache 都在同一个端口上,除非你在 httpd.conf.
中设置反向代理您可以按照此处的调试说明查看 SocketIO 可能为您提供的更多描述性错误:
http://socket.io/docs/logging-and-debugging/
您也可以在浏览器中转到这个 URL 并查看它试图连接到哪个页面: