如何从客户端发出消息[node.js + socket.io]



我试图用套接字从客户端发出消息。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服务器初始化代码,我们可以帮助您更好地解决您的特定代码问题。

相关内容

  • 没有找到相关文章

最新更新