问题
I have the following code on my server
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
});
});
});
But instead of showing "update_count_message" in the console, the console logs a continuous stream of polls.
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
how can I solve this? I do not want to receive a loop in the browser.
回答1:
The browser/socket is not connecting to NodeJS. NodeJS is either not running, or you are attempting to connect to the wrong port - in your case it looks like it is trying to connect to port 80. If you already have Apache running on port 80, you can't run both NodeJS and Apache on the same port unless you setup a reverse proxy in your httpd.conf.
You can follow the debug instructions here to see what more descriptive errors SocketIO might have for you:
http://socket.io/docs/logging-and-debugging/
You could also go to this URL in the browser and see what page it is trying to connect to:
http://localhost/socket.io/
来源:https://stackoverflow.com/questions/33990574/client-side-receive-polling-on-socket-io