Socket io心跳不会发出

时间:2014-02-27 19:00:36

标签: node.js sockets websocket npm emit

当我尝试与我的套接字io进行通信时,建立了连接并且正在进行websocket写入,但是听觉信号没有在服务器上发出..所以我没有在客户端接收任何内容。但是当我再次断开并连接服务器时,旧的书面消息就会被发出。请帮我解决这个问题。谢谢 我尝试过不同的端口号,但它不起作用。

app.js(服务器):

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/index.html');
});


io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
  console.log("Connected");
  });
});

index.html(客户端)

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect();
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

1 个答案:

答案 0 :(得分:1)

由于防火墙或防病毒软件,Socket.io可能会运行不稳定。这实际上是WebSockets的一个问题。

要解决这个问题,您可以尝试从客户端和服务器之间的传输中排除WebSockets,并在服务器端指定XHR长轮询和JSONP(因为这两个是最稳定的):

io.set('transports', ['xhr-polling', 'jsonp-polling']);

我还建议您查看Engine.io。这个框架是由Socket.io作者编写的,它更加稳定。

诀窍如下:
虽然Socket.io首先尝试通过WebSockets连接(当此尝试失败时,用户将不得不等待大约10秒才能切换到另一个传输),Engine.io尝试通过XHR(在100%情况下工作)进行连接,并且同时尝试WebSocket连接,如果成功 - 切换到WebSockets。

编辑:Socket.io版本1.0+构建于Engine.io的顶部,因此它现在具有上述所有优势。