Socket.io在服务器ID之前加上'/#'

时间:2016-03-16 16:52:07

标签: node.js sockets socket.io

我有一个奇怪的问题,我刚刚克隆了一个工作完全正常的回购,但由于没有明显的原因,它已经不存在了。

基本上发生的事情是我的socket.io服务器实例在'id'前面加上'/#',使它们与客户端不同。

所以在服务器端我有 /#zG3wncZxZvgRE7LKAAAA ,在客户端我有 zG3wncZxZvgRE7LKAAAA

此外,当客户端收到消息时,可以在框架选项卡上看到:

4undefined

这是我的app.js和config.room = fabio1

import config from './config';
import io from './factories/io';

io.on('connection', (socket) => {
  socket.join('dmClient');
  socket.join(config.room);
  console.log('socketId', socket.id);
});

这是我的 /factories/io.js

import socketIo from 'socket.io';
const io = socketIo(3000);

export default io;

这不是我的前端,但它也会触发错误:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Socket.IO Chat Example</title>
</head>
<body>

  <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
  <script src="bower_components/socket.io-client/socket.io.js"></script>
  <script>
    $(function() {
      var socket = io('http://localhost:3000');

      socket.on('connect', function () {
        console.log(socket.id);
      });
    });
  </script>
</body>
</html>

更多信息:

  • socket.io - 1.4.5
  • node - v4.4.0

1 个答案:

答案 0 :(得分:0)

事实证明,Socket.io使用1.4。*版本做了一些重大更改我创建了这个issue,其中creole指出了这两个问题Default room name is not socket id和{{3} }

因此,如果我们想要客户端ID ,则在服务器端而不是使用socket.id,我们需要使用socket.client.id

import config from './config';
import io from './factories/io';

io.on('connection', (socket) => {
  socket.join('dmClient');
  socket.join(config.room);
  console.log('socketId', socket.client.id);// this did the trick
});