React Native socket-io-接收到的数据不是字符串,或者不是可识别的编码

时间:2019-02-15 19:34:18

标签: reactjs react-native websocket socket.io-1.0

我正在为纸牌游戏构建原型,我有一个网络版本的游戏,其中我连接到socket.io。在所有主流浏览器上都可以正常工作。

网络应用版本中的代码

import io from 'socket.io-client'

export const connectToSocket = (uid, cb) =>  {
  socket = io.connect(domain, { path: '/api/v1/streams/socket/', query: 'token='+uid})

  socket.on('connect', function(){
      console.log('Socket connected')
  });

  socket.on('message', function(data){
      cb([null,JSON.parse(data)])
  });

  socket.on('connect_error', err => cb([err, null]))
  socket.on('disconnect', function(){cb([400, null])});
} 

但是,当我尝试通过react native连接时,我会收到错误消息

  

收到的数据不是字符串,或者不是公认的编码。

反应本机代码

import io from 'socket.io-client'
let socket

export const connectToSocket = (uid, cb) =>  {
   socket = io.connect({path: '/api/v1/streams/socket/', query: `token=${uid}`})
}

我已经阅读了关于stackoverflow和git的所有文章,在我看来,几乎每个人都可以使用的解决方案是强制Websocket传输而不是池化。例如:

   socket = io.connect({path: '/api/v1/streams/socket/', query: `token=${uid}`, transports: ['websocket']})

但是此解决方案不适用于我。我知道后端可以正常运行,因为Web应用程序版本可以连接。另外,当我发送带有本机响应的连接请求时,服务器端会记录它应该记录的内容。

尽管服务器端工作正常,但这是连接事件的代码

func (s *sockets) socketHandleConnectionEvent(so socketio.Socket) {
  token := so.Request().URL.Query().Get("token")
  uid, err := g.f.verifyToken(token)
  if err != nil {
      fmt.Println("Could not verify token")
      return
  }

  //Connect user
  s.clients.set(uid, so)

  // Check if player is currently in a room
  inRoom, roomID, err := IsPlayerInRoom(uid)
  if err != nil {
      fmt.Println("Error: Checking player is in room")
  }

  if inRoom == true {
      fmt.Println("REJOINING ROOM")
      so.Join(roomID)
      SendCurrentGameState(roomID, uid)
      return
  }

  gameID, gameStarted := GenerateRoom(uid)
  so.Join(gameID)
  SendCurrentGameState(gameID, uid)

  if gameStarted {
      s.addTimer(gameID, uid)
  }

  return
}

0 个答案:

没有答案