0

当我尝试与我的套接字 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>
4

1 回答 1

1

由于防火墙或防病毒,Socket.io 可能工作不稳定。这实际上是 WebSockets 的问题。

为了解决这个问题,您可以尝试从客户端和服务器之间的传输中排除 WebSocket,并在服务器端仅指定 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 之上,因此它现在具有上述所有优点。

于 2014-02-27T19:19:31.647 回答