我试图用套接字从客户端发出消息。io…
下面是我的客户端代码:
var socket = io.connect('http://localhost/');
socket.on('connect', function(data){
setStatus('connected');
socket.emit('subscribe', {channel:'update.comment'});
});
服务器:io.sockets.on('connection', function (socket) {
socket.emit('message', { text : 'Welcome!' });
socket.on('subscribe', function (data) {
socket.join(data.channel);
redisClient.subscribe(data.channel);
});
});
我也得到这个错误信息在控制台:
得到http://localhost/socket.io?EIO=3&transport=polling&t=1442169984269-1404(未找到)
全serever:
var app = require('express')();
var http = require('http').Server(app);
var redis = require('ioredis');
var io = require('socket.io')(http);
redisClient = redis.createClient();
//look for connection errors and log
redisClient.on("error", function (err) {
console.log("error event - " + redisClient.host + ":" + redisClient.port + " - " + err);
});
io.sockets.on('connection', function (socket) {
socket.emit('message', { text : 'Welcome!' });
//on subscription request joins specified room
//later messages are broadcasted on the rooms
socket.on('subscribe', function (data) {
socket.join(data.channel);
redisClient.subscribe(data.channel);
});
});
redisClient.on('ready', function(data) {
console.log('#redis ready');
});
redisClient.on("message", function(channel, message){
console.log(channel);
var resp = {'text': message, 'channel':channel};
io.sockets.in(channel).emit('message', resp);
});
http.listen(3000, function(){
console.log('Listening on Port 3000');
});
新问题识别:
您的服务器正在监听端口3000,但您试图连接端口80。错误信息http://localhost/socket.io?EIO=3&transport=polling&t=1442169984269-1
上没有端口号,因此默认为80端口号。
该错误消息意味着您的服务器端套接字。io代码没有正确初始化,因此没有侦听启动所有webSocket连接的HTTP请求,因此当浏览器尝试连接该URL以启动套接字时。IO连接,服务器端没有人监听,所以web服务器返回404错误给浏览器。
如果您正在使用Express,则这是最小套接字。将IO初始化以将其挂接到服务器:
var express = require('express');
var app = express();
var server = app.listen(8081);
var io = require('socket.io').listen(server);
对于普通HTTP服务器,这是最小的套接字。io初始化:
var app = require('http').createServer(handler)
var io = require('socket.io')(app);
app.listen(80);
一如既往,如果您向我们展示套接字。您正在使用的IO和web服务器初始化代码,我们可以帮助您更好地解决您的特定代码问题。